问题描述
||
这个问题已经在这里有了答案:
解决方法
您应该使用最易读的代码。因此,这实际上取决于您在做什么。
恕我直言,
is
关键字是邪恶的。它邀请您打破Liskov替代原则。
, 第二个示例不适用于值类型,因为如果转换失败,“ 1”运算符将返回null。在C#中,如果对象的类型与您提供的类型匹配,则\'is\'
运算符将返回true
,否则返回false。
, is运算符检查对象是否与给定类型兼容,并且评估结果为布尔值:true或false。 is运算符永远不会引发异常。
as运算符的工作方式与强制转换一样,只是as运算符永远不会引发异常。相反,如果无法投射对象,则结果为null。如果失败,常规强制转换'(Type)\'将引发异常。请注意,使用\'as \'转换为null会产生null。因此,“ as” -cast的null结果并不总是意味着对象不是给定类型,可能是实例为null。
, 根据您的代码,如果需要将\'o \'用于某些操作,则\“ as \”更好。如果仅使用\'o \'来检查类型,则\'is \'更好。
, 我认为两个代码都做同样的事情。如果不确定对象是否正在处理,我可能会使用第一个(例如,动态加载应该实现接口的类)。但是如果我很确定,将使用第二个(例如,在页面上找到控件)。
, 使用\“ as \”并检查null比使用\“ is \”然后进行强制转换要快。