我有一个IList变量,它包含myObject的1 - N个条目。每个条目都可以是myObject的实例或其任何子对象(派生类对象)。在对IList进行预测时,如何识别IList的每个成员是哪种类型的对象?
foreach(myObject anObject in myList)
{
if(anObject is of type ???)
}
答案 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)
对于if
或Foo
个对象,此Bar
将返回true。