任何人都可以对as和cast进行比较吗?
答案 0 :(得分:11)
如果要转换的对象不是所请求的类型,则直接转换将失败。 as
- cast将返回null。例如:
object obj = new object();
string str = (string)obj; // Throws ClassCastException
然而:
object obj = new object();
string str = obj as string; // Sets str to null
当正在转换的类型 时,任何语法的结果都是相同的:对象已成功转换。
请特别注意,您应该避免使用“as-and-invoke”模式:
(something as SomeType).Foo();
因为如果转换失败,您将抛出NullReferenceException而不是ClassCastException。这可能会导致您追逐something
为空的原因,而实际上并非如此!更丑陋但更好的代码
((SomeType)something).Foo();
当something
引用的对象无法转换为SomeType
时,将抛出ClassCastException;当something
为空时,将抛出NullReferenceException。
答案 1 :(得分:1)
“as”不抛出异常,如果强制转换失败则返回null。
它与以下代码类似:
if (objectForCasting is CastingType)
{
result = (CastingType)objectForCasting;
}
else
{
result = null;
}
好的做法是在使用as语句后使用check for null:
CastingType resultVar = sourceVar as CastingType;
if (resultVar == null)
{
//Handle null result here...
}
else
{
// Do smth with resultVar...
}
答案 2 :(得分:0)
执行显式强制转换与在三个主要方面使用as运算符不同。
as as operator ...