2012-03-25 50 views
2

我在尋找is運算符,但類型操作數(右)是動態的。確定對象是否或來自特定類型?

public static bool Is(this object value, Type type) 
{  
    if (type == null) throw new ArgumentNullException(type, "type"); 
    if (value == null) return false; 

    var valueType = value.GetType(); 
    return valueType == type || valueType.IsSubclassOf(type) 
    || valueType implements interface 
} 

有沒有更簡單的方法呢?

我試着用IsAssignableFrom,但它doesn't seem to be working

var x = "asdf"; 
Console.WriteLine(x.GetType().IsAssignableFrom(typeof(object))); 
Console.WriteLine(x is object); 
+4

關於您的更新:您使用它錯誤,應該是'typeof(object).IsAssignableFrom(x.GetType())' – BrokenGlass 2012-03-25 01:46:10

+0

@BrokenGlass,oops,抱歉。 – Shimmy 2012-03-25 01:47:00

+0

@BrokenGlass,請投票結束,而不是downvoting。謝謝 – Shimmy 2012-03-25 01:49:20

回答

5

這聽起來像你正在尋找IsAssignableFrom

type.IsAssignableFrom(value.GetType()) 
3

是的,有一個更好的方法,你只需要扭轉你問題。而不是詢問valueType是否是類型的子類,檢查type是否可以從valueType分配。幸運的是,有一個呼叫做到這一點,請參閱IsAssignableFrom

相關問題