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不会执行用户定义的转换,例如隐式或显式转换运算符,而强制转换语法可以执行这些转换

前缀转换和as转换的主要区别在于转换失败时会发生什么。例如,假设g实际上是另一个SpecificType的实例,而不是SpecificType的子类。在这种情况下,前缀cast抛出一个异常-但是,当cast失败时,as cast返回null,让程序继续执行

看看这篇文章:


如果您尝试在
类型上强制转换为
,例如
int a=值为int
,您将获得一个
InvalidCastException
。值类型必须转换为
(int)intValue


如果您正在考虑任何
参考
类型。您可以将
用作
,其中在施法时失败的将返回
null
。您可以使用直接强制转换,如
(string)value
,如果强制转换失败,这里将出现
异常

您不能将
用作不可为空的值类型。您可以将其用于可为空的值,例如
int?y=x为intint 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