【问题标题】:Check the actual type of an object [duplicate]检查对象的实际类型[重复]
【发布时间】:2014-07-02 01:53:56
【问题描述】:

我有:

class A class B : A class C : B class D : B

我有一个列表

存储 C 和 D 的实际对象的位置。

如何检查 List 中的对象是否是 B 的子类型?

目前,我正在做item.GetType() == typeof(C) || item.GetType() == typeof(D)

这行得通,但是如果我有超过 2 个从 B 继承的类怎么办?把它们都写下来似乎是多余的。有没有办法检查对象是否是 B 的子类型?谢谢!

【问题讨论】:

标签: c#


【解决方案1】:

您是否考虑过使用演员表? 如果您不知道它是什么,请查看this

在涉及基本类型和派生类型的转换操作的情况下,有 是抛出异常的风险。之前测试兼容性 实际上执行强制转换,C# 提供了两个运算符来允许 安全铸造而不会引起任何异常。这两个运算符是:

“Is”运算符用于检查从一种引用类型到另一种引用类型的转换是否成功,并确定对象的类型,而无需
'As' 运算符用于获取转换值,如果转换可以成功并因此更有效。

【讨论】:

    【解决方案2】:

    您可以使用is 关键字。

    if(item is B)
    

    参考:http://msdn.microsoft.com/en-us/library/scekt9xw.aspx

    【讨论】:

      猜你喜欢
      • 2020-04-27
      • 2020-12-21
      • 2016-12-31
      • 2013-09-09
      • 2020-07-01
      • 2012-12-05
      • 2016-10-14
      • 2015-03-23
      相关资源
      最近更新 更多