“is”运算符在 C# 中如何工作?
我被告知这是:
if (x is string)
{
string y = x as string;
//Do something
}
不如这个:
string y = x as string;
if (y != null)
{
//Do something
}
哪个更好?为什么?
“is”运算符在 C# 中如何工作?
我被告知这是:
if (x is string)
{
string y = x as string;
//Do something
}
不如这个:
string y = x as string;
if (y != null)
{
//Do something
}
哪个更好?为什么?
我认为第二个更好,因为在第一种情况下它将投射对象 2 次,第一次使用 is 运算符,第二次使用 as 运算符。
而在第二种情况下,它只施放一次。
is 运算符检查对象是否可以转换为特定类型
像
if (someObj is StringBuilder)
{
StringBuilder ss = someObj as StringBuilder
....
}
as 运算符将对象转换为特定类型,如果失败则返回 null。
像
StringBuilder b = someObj as StringBuilder;
if (b != null) ...
当预期将多个类型存储在 x 中时,我将使用第一种方法。(您可能会收到一个字符串或 StringBuilder 等)。这将允许基于非异常的处理。
如果您总是期望 x 持有某种类型的值,那么我会使用第二个选项。对 null 的检查成本低廉,并且提供了一定程度的验证。
- 编辑 -
哇。在阅读了下面的一些评论后,我开始寻找更多更新的信息。在使用 as vs is vs (casting) 时,还有很多需要考虑的因素。这是我发现的两个有趣的读物。
即使没有空检查,使用“as”而不是强制转换是否有意义?和http://blogs.msdn.com/b/ericlippert/archive/2009/10/08/what-s-the-difference-between-as-and-cast-operators.aspx?PageIndex=1#comments
Jon Skeet 的博客似乎很好地总结了这两者。 http://www.yoda.arachsys.com/csharp/faq/#cast.as