在C#IList中标识对象的类

时间:2011-03-30 19:46:28

标签: c# object identifier

我有一个IList变量,它包含myObject的1 - N个条目。每个条目都可以是myObject的实例或其任何子对象(派生类对象)。在对IList进行预测时,如何识别IList的每个成员是哪种类型的对象?

foreach(myObject anObject in myList)
{
   if(anObject is of type ???)
}

5 个答案:

答案 0 :(得分:1)

您可以使用

anObject is MyObject

Type.IsSubclassOf(MyObject)

您还可以使用baseType.IsAssignableFrom(type)来确定是否可以从给定的基本类型派生类型

答案 1 :(得分:1)

查看is operator

foreach(MyObject anObject in myList)
{
   if(anObject is MyTypeWhichInheritsFromMyObject)
     ...
}

答案 2 :(得分:0)

我不是一个.NET开发人员,但在Java中有一个名为instanceof的运算符,它将检查该对象是否是某个类的实例。

检查此链接,它与对象的typeid有关,我认为这就是你正在寻找的伙伴。

http://msdn.microsoft.com/en-us/library/b2ay8610(vs.71).aspx

答案 3 :(得分:0)

如果您想要询问每个实例的类型,请执行以下操作:

foreach(myObject anObject in myList)
{
    Type anObjectType = anObject.GetType();
    // Perform appropriate work.
}

答案 4 :(得分:0)

如果你的OO结构设计得恰当,你真的不需要知道 - 无论你想用什么做什么,都可以使用适当的实现来完成,无论它是哪种类型。

话虽如此,你可以通过调用来获取任何对象的类型:

Type type = myObject.GetType();

您可以将该类型与其他特定类型进行比较,例如:

if (myObject.GetType() == typeof(Foo))

is运算符可能会让您遇到麻烦,具体取决于您的情况,因为如果您正在检查某些内容是否为父类,即使它确实是一个子类,也是如此。例如:

class Foo {}
class Bar : Foo {}

if (myObject is Foo)

对于ifFoo个对象,此Bar将返回true。