当通过方法传入类型时如何使用'is'?

use*_*120 6 c# syntax

我试图将一个类型传递给一个方法,我可以检查它是否是某种类型.但是我下面的代码没有编译,我想知道什么是错的.编译错误是:找不到类型或命名空间名称'dataType'.

public static List<object> findType(Type dataType)
{
    List<object> items = new List<object>();
    foreach (KeyValuePair<int, object> entry in DataSource.ItemPairs)
    {
        if (entry.Value != null && entry.Value is dataType)
        {
            items.Add(entry.Value);
        }
    }
    return items;
}
Run Code Online (Sandbox Code Playgroud)

Sel*_*enç 9

isoperator需要一个类型名称,而不是Type实例.因此,在编译时应该知道该类型.

但是,您可以使用IsAssignableFrom方法来检查类型是否兼容:

if (entry.Value != null && dataType.IsAssignableFrom(entry.Value.GetType())
Run Code Online (Sandbox Code Playgroud)


Rhu*_*orl 5

is 是c#中的特殊编译构造 - 您不能将变量作为Type,您必须编写实际的类型名称.

如果你想检查确切的类型,请使用:

if(entry.Value.GetType() == dataType)
Run Code Online (Sandbox Code Playgroud)

如果要检查它是否是继承的,可以使用:

if (entry.Value != null && dataType.IsAssignableFrom(entry.Value.GetType()))
Run Code Online (Sandbox Code Playgroud)