Проверьте, имеет ли объект странное поведение типа SomeClass - PullRequest
0 голосов
/ 12 августа 2011

У меня есть три класса, которые наследуются от класса, потому что я хочу, чтобы эти объекты рассматривались как базовый класс:

public class Find 
{
}

public class StringFind : Find
public class DateFind : Find
public class LongFind : Find

ОК, затем я создаю массив объектов «Найти» и хочу проверитьесли каждый объект имеет тип StringFind, DateFind или LongFind, поэтому я создал что-то вроде:

protected bool CompareUnion(params Find[] f)
{
    foreach (var searchL in f)
    {
        if (f is StringFind)
        {
            //do something
            var a = 3;
        }
    }

    return true;
}

почему f не может иметь тип StringFind, если StringFind наследует от этого класса?Я думал, что Visual Studio был неправ, но я никогда не достигал точки останова, и я на самом деле создаю массив объектов StringFind.

1 Ответ

3 голосов
/ 12 августа 2011

Это просто опечатка. Вам нужно:

if (searchL is StringFind) { ... }

f - это просто массив Find объектов, которые вы передали, поэтому он будет удовлетворять только f is Find[].

Обычно, когда я вижу такой код, я начинаю думать о том, как его избежать. Вместо того, чтобы тестировать определенный тип и изменять поведение, почему бы не иметь метод virtual и адаптировать поведение путем переопределения метода в производных классах?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...