C# C中对象类型转换(as/(int))之间的差异#
可能重复:C# C中对象类型转换(as/(int))之间的差异#,c#,casting,C#,Casting,可能重复: 当我在制作C#时,她正在进行打字,当时我有一个疑问:- “as vs.(int)/(string)/…soon”的对象类型转换有什么区别 例子: VS VS 很快 有人能详细解释一下吗 提前感谢。对于不可为空的值类型,您不能使用as,对于可为空的值类型,您只能使用as。我的意思是,下面的一行会给你一个构建错误/ int a = value as int; 无论如何,如果强制转换无效,as将返回null。我们通常使用它 Class1 c1 = value as Class1;
当我在制作C#时,她正在进行打字,当时我有一个疑问:- “as vs.(int)/(string)/…soon”的对象类型转换有什么区别 例子: VS
VS
很快 有人能详细解释一下吗
提前感谢。对于不可为空的值类型,您不能使用as,对于可为空的值类型,您只能使用as。我的意思是,下面的一行会给你一个构建错误/
int a = value as int;
无论如何,如果强制转换无效,as将返回null。我们通常使用它
Class1 c1 = value as Class1;
if (c1 != null)
{
//do your logic.
}
as运算符用于执行某些类型的转换
在兼容的引用或可为空的类型之间
备注:
as运算符类似于强制转换操作。但是,如果转换
不可能,因为返回null而不是引发异常。
考虑下面的表达式:
expression as type
它与以下表达式等效,只是该表达式为
只评估了一次
expression is type ? (type)expression : (type)null
请注意,as运算符仅执行到引用或的转换
可为空的类型和装箱转换。as操作员无法执行以下操作:
其他转换,例如用户定义的转换,应该
相反,可以通过使用强制转换表达式来执行
使用as运算符与C#中的强制转换在三个重要方面有所不同:
- 当您尝试转换的变量不是请求的类型或在其继承链中时,它返回null,而不是引发异常
- 它只能应用于转换为引用类型的引用类型变量
- 使用as不会执行用户定义的转换,例如隐式或显式转换运算符,而强制转换语法可以执行这些转换
如果您尝试在
值
类型上强制转换为值
,例如int a=值为int
,您将获得一个InvalidCastException
。值类型必须转换为(int)intValue
如果您正在考虑任何
参考
类型。您可以将用作
,其中在施法时失败的将返回null
。您可以使用直接强制转换,如(string)value
,如果强制转换失败,这里将出现异常
。您不能将用作不可为空的值类型。您可以将其用于可为空的值,例如int?y=x为int我在反驳你。你的第一句话是不正确的,正如我的评论所指出的那样。更好,尽管仍然没有那么清楚。(我的评论是在你原来的句子的上下文中。)请参阅此链接[在CLR中使用'as'关键字与强制转换][1][1]:可能会对你有所帮助:感谢所有提供的信息。如另一条评论中所述,它也可以应用于可空值类型。
int a = value as int;
Class1 c1 = value as Class1;
if (c1 != null)
{
//do your logic.
}
expression as type
expression is type ? (type)expression : (type)null