Данное выражение никогда не относится к указанному типу - PullRequest
0 голосов
/ 07 августа 2020

У меня есть абстрактный класс, назовем его Base. Затем у меня есть несколько классов, унаследованных от Base, как в этом примере:

public class Actual : Base
{
    ...
}

Я хочу определить, является ли фактический тип (а не абстрактная база) во время выполнения специфицированным c типом ( с использованием ключевое слово ). Это делается в методе, который принимает любой класс, который наследуется от Base:

public void Method(Base input)
{
    if (input.GetType() is Actual)
    {
        // do something
    }
}

Это дает мне предупреждение в Visual Studio (2019), в котором говорится, что:

CS0184: Данное выражение никогда не относится к предоставленному («Фактическому») типу

Почему это? Класс Actual - лишь один из многих, наследуемых от Base. Так что никоим образом не указано, что он будет такого типа во время выполнения ...

Примечание:

Я пытался следовать Actual, используя Ctrl + Click, и я сделал то же самое для Base. В обоих случаях я попадаю в ожидаемые классы. Кроме того, нет повторяющихся имен классов ни в одной из сборок, участвующих в решении.

1 Ответ

1 голос
/ 10 августа 2020

Согласно совету CodeCaster, мы должны использовать input is Actual вместо input.GetType() is Actual.

Как следующий код:

public void Method(Base input)
        {
            if (input is Actual)
            {
                Console.WriteLine("yes");
            }
        }

Кроме того, вы можете использовать его как:

        Program p = new Program();
        Actual act = new Actual();
        p.Method(act);

Наконец, вы получите ответ «да».

...