可能重复:
What is the difference between the following casts in c#?
当我在使用C#时,她正在进行类型转换,我怀疑: -
“as vs.(int)/(string)/ ... soon”的对象类型转换有什么区别?
int a = (int) value;
VS
int a = value as int;
string a = (string) value;
VS
string a = value as string;
很快......
有任何帮助可以详细解释这个吗?
提前致谢。
答案 0 :(得分:3)
as运算符用于执行某些类型的转换 在兼容的引用或可空类型之间。
说明:
as运算符就像一个强制转换操作。但是,如果转换 是不可能的,因为返回null而不是引发异常。 请考虑以下表达式:
expression as type
除了表达式之外,它等效于以下表达式 只评估了一次。
expression is type ? (type)expression : (type)null
请注意,as运算符仅执行转换以引用或 可空类型和拳击转换。 as运算符无法执行 其他转换,例如用户定义的转换,应该 而是通过使用强制转换表达式来执行。
答案 1 :(得分:1)
您不能使用非可空值类型,您只能使用可空的值。我的意思是下面的行会给你一个构建错误/
int a = value as int;
无论如何,如果转换无效,则as返回null。我们通常使用它。
Class1 c1 = value as Class1;
if (c1 != null)
{
//do your logic.
}
答案 2 :(得分:1)
前缀和后投的主要区别在于演员失败时会发生什么。例如,想象一下,g实际上是AnotherSpecificType的一个实例,它不是SpecificType的子类。在这种情况下,prefix-cast会抛出异常 - 但是,当转换失败时,as-cast会返回null,从而允许执行程序桶。
看看这篇文章:
答案 3 :(得分:0)
使用as运算符与C#中的强制转换不同,有三个重要方面:
答案 4 :(得分:0)
如果您尝试在as
类型上投放value
,例如int a = value as int;
,则会获得InvalidCastException
。值类型必须为(int) intValue
。
如果您正在考虑任何reference
类型。您可以使用as
在投标失败时返回null
。您可以使用(string) value
之类的直接投射,如果投射失败,这里会获得exception
。