2012-10-07 97 views
2

我想要做這樣的事情在C#中的以下內容:如何測試變量是否是C#中的變量類型?

public bool ValidType(Type type) 
{ 
    return _someVar is type; 
} 

似乎C#並不支持,雖然這句法; 「is」右邊的項目似乎必須是絕對類型名稱,而不是對類型的引用。

我發現下面的代碼似乎工作:

return _someVar.GetType().IsInstanceOfType(type) || 
    _someVar.GetType().IsSubclassOf(type) || 
    _SomeVar.GetType().IsAssignableFrom(type); 

我不明白是什麼IsAssignableFrom做,除了它似乎需要一些類型比較爲IsInstanceOfTypeIsSubclassOf似乎並不匹配所有情況都適當。

這真的是最好的方式來測試變量是一種類型,由另一個變量引用,還是有一個簡單的語法,我錯過了?

+0

總是有'typeof'運算符和'as'關鍵字 –

+0

感謝編輯Tim :) –

+0

@ Dan-o,「as」與「is」有同樣的問題,因爲它只能用於與類型名稱。 typeof()將不會顯示_someVar是否是派生類型的實例。 –

回答

4

IsAssignableFrom就足夠了,不需要另外兩個測試,但是你把它叫做錯誤的方式。下面是正確的方法:

public bool ValidType(Type type) 
{ 
    return type.IsAssignableFrom(_someVar.GetType()); 
} 

我不明白是什麼IsAssignableFrom做

其實,這究竟是幹什麼的名字告訴你:它測試一個給定類型的變量是否可指派來自另一種類型的值。

+0

對不起,但事實並非如此,我確實需要其他人。如果「type」是_someVar的類型,則IsAssignableFrom僅返回true。如果它是_someVar的父類型,則返回false。我需要與「is」完全相同的功能,它也適用於父類型。 –

+0

@大衛啊,你需要反駁論點! –

+0

啊,我應該仔細看看你的代碼。我沒有想過要做type.IsAssignableFrom(),我一直在做_someVar.IsAssignableFrom()。這確實做我需要的。非常感謝。 –

相關問題