我试图将一个类型传递给一个方法,我可以检查它是否是某种类型.但是我下面的代码没有编译,我想知道什么是错的.编译错误是:找不到类型或命名空间名称'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)
isoperator需要一个类型名称,而不是Type实例.因此,在编译时应该知道该类型.
但是,您可以使用IsAssignableFrom方法来检查类型是否兼容:
if (entry.Value != null && dataType.IsAssignableFrom(entry.Value.GetType())
Run Code Online (Sandbox Code Playgroud)
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)