簡體   English   中英

在C#IList中標識對象的類

[英]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)

對於FooBar對象,此if將返回true。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM