C# “与”的区别是什么;“对象作为类型”;及;((类型)对象)“;?

C# “与”的区别是什么;“对象作为类型”;及;((类型)对象)“;?,c#,object,types,casting,strong-typing,C#,Object,Types,Casting,Strong Typing,可能重复: 我已经看到类型转换是双向的。区别是什么?如果失败,“as”将结果设置为null 如果显式强制转换失败,将引发异常。如果无法将对象强制转换为目标类型,则强制转换将引发异常as将只返回null var myString = myObject as string; var myString = (string)myObject; 它只检查myobject的运行时类型。如果它的字符串,则仅将其转换为字符串,否则只返回null var myString = myObject as s

可能重复:


我已经看到类型转换是双向的。区别是什么?

如果失败,“as”将结果设置为
null


如果显式强制转换失败,将引发异常。

如果无法将对象强制转换为目标类型,则强制转换将引发异常
as
将只返回
null

var myString = myObject as string;
var myString = (string)myObject;
它只检查
myobject
的运行时类型。如果它的
字符串
,则仅将其转换为
字符串
,否则只返回
null

var myString = myObject as string;
var myString = (string)myObject;
这还查找从源类型到字符串的
隐式
转换。如果运行时类型既不是
字符串
,也没有
隐式
转换,则会引发异常


阅读第3项:希望
作为
操作符,而不是比尔·瓦格纳的《有效C#》中的演员。

谢谢!我从未意识到这一点。这是否意味着
(string)myInt
将返回myInt的字符串值,但
myInt as string
将返回null?它寻找显式转换,否?@Alex:如果存在从源类型到目标类型的隐式转换方法,则是,它将返回myInt的字符串值。@Nawaz谢谢您提供的信息。非常感谢。@Nawaz抱歉,让我重新表述一下:如果有从源类型到
string
的隐式转换,那么强制转换无论如何都是多余的。如果定义了
显式
转换,则将使用该转换。”“显式”或“隐式”实际上并不相关,因为定义其中任何一个都会导致调用该代码。请参阅我关于该主题的文章: