[英]Identifying the class of an object in a C# IList
我有一個IList變量,它包含myObject的1 - N個條目。 每個條目都可以是myObject的實例或其任何子對象(派生類對象)。 在對IList進行預測時,如何識別IList的每個成員是哪種類型的對象?
foreach(myObject anObject in myList)
{
if(anObject is of type ???)
}
你可以利用
anObject is MyObject
要么
Type.IsSubclassOf(MyObject)
您還可以使用baseType.IsAssignableFrom(type)
來確定是否可以從給定的基類型派生類型
看看is運算符 。
foreach(MyObject anObject in myList)
{
if(anObject is MyTypeWhichInheritsFromMyObject)
...
}
我不是一個.NET開發人員,但在Java中有一個名為instanceof的運算符,它將檢查該對象是否是某個類的實例。
檢查這個鏈接,它與對象的typeid有關,我認為這就是你正在尋找的伙伴。
http://msdn.microsoft.com/en-us/library/b2ay8610(vs.71).aspx
如果你想要詢問每個實例的類型,請執行以下操作:
foreach(myObject anObject in myList)
{
Type anObjectType = anObject.GetType();
// Perform appropriate work.
}
如果你的OO結構設計得恰當,你真的不需要知道 - 無論你想用什么做什么,都可以使用適當的實現來完成,無論它是哪種類型。
話雖如此,您可以通過調用獲取任何對象的類型:
Type type = myObject.GetType();
您可以將該類型與另一種特定類型進行比較,例如:
if (myObject.GetType() == typeof(Foo))
根據您的情況, is
運算符可能會讓您遇到麻煩,因為如果您正在檢查某些內容是否為父類,即使它確實是一個子類,也是如此。 例如:
class Foo {}
class Bar : Foo {}
if (myObject is Foo)
對於Foo
或Bar
對象,此if
將返回true。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.