如何在 System.Type 变量中使用“is”运算符?

Jon*_*nas 5 c#

这是我在做什么:

object ReturnMatch(System.Type type)  
{  
    foreach(object obj in myObjects)  
    {
        if (obj == type)  
        {  
            return obj;  
        }  
    }  
}  
Run Code Online (Sandbox Code Playgroud)

但是,如果 obj 是 的子类type,它将不匹配。但我希望函数以与使用 operator 相同的方式返回is

我尝试了以下操作,但无法编译:

if (obj is type) // won't compile in C# 2.0  
Run Code Online (Sandbox Code Playgroud)

我想出的最佳解决方案是:

if (obj.GetType().Equals(type) || obj.GetType().IsSubclassOf(type))  
Run Code Online (Sandbox Code Playgroud)

没有办法使用运算符is使代码更干净吗?

Isa*_*avo 5

遇到这个问题时,我使用了 IsAssignableFrom 方法。

Type theTypeWeWant; // From argument or whatever
foreach (object o in myCollection)
{
    if (theTypeWeWant.IsAssignableFrom(o.GetType))
         return o;
}
Run Code Online (Sandbox Code Playgroud)

另一种可能或可能不适用于您的问题的方法是使用通用方法:

private T FindObjectOfType<T>() where T: class
{
    foreach(object o in myCollection)
    {
        if (o is T)
             return (T) o;
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

(代码是凭记忆写的,未经测试)