可能重复:今天
Casting: (NewType) vs. Object as NewType
Why is the C# “as” operator so popular?不同的角色类型在C#
嘿,
我知道这可能是一个愚蠢的问题,但这个疑问来找我。
是做什么
String text = (String) variable;
和
String text = variable as String;
之间的区别?
可能重复:今天
Casting: (NewType) vs. Object as NewType
Why is the C# “as” operator so popular?不同的角色类型在C#
嘿,
我知道这可能是一个愚蠢的问题,但这个疑问来找我。
是做什么
String text = (String) variable;
和
String text = variable as String;
之间的区别?
的铸造可以做三两件事:
的as
操作几乎总是一个参考转换,唯一的例外是拆箱到可空类型:
object x = "hello";
int? y = x as int?; // y is null afterwards
然后出现在执行时失败的转换行为。所以区别在于:
InvalidCastException
失败; as
将导致目标类型的空值而不是as
不能as
只能用于拆箱如果目标类型是可以为空的值类型as
将返回空,如果variable
实际上不是那种类型(String
在这种情况下)。演员阵容会抛出异常。
如果变量实际上不是该类型**或派生类型**(在这种情况下为String),将返回null。演员阵容会抛出异常。 – 2010-02-25 18:44:16
打败我吧。请记住'as'不适用于值类型。 'int i = obj as int;'不会编译。 as'关键字必须与@Mehrdad Afshari说的引用类型或可为空的类型一起使用。 – 2010-02-25 18:44:33
@Matt:它的工作原理。你需要使用一个可为空的类型:'int?我= obj作为int?;' – 2010-02-25 18:45:18
以下是链接到Eric Lippert的博客在C#中进行投射。我总结一下,但这很短暂,他会解释得比我好得多。
这里是他的转型操作后:
http://blogs.msdn.com/ericlippert/archive/2009/03/19/representation-and-identity.aspx
有很多不同的方式在C#中投。
这将尝试将引用强制转换为String引用。如果转换失败,它抛出一个异常:
string text = (String) variable;
这将尝试将参照转换为一个字符串参考。如果转换失败,它会返回一个空引用被赋给变量:
string text = varible as String;
这会施放一个字符串的对象引用的参考,这是一个安全的铸件作为字符串从Object继承:
object text = (object)"1337";
铸造父类,也可以隐式进行:
object text = "1337";
这将框的值对象内,然后重新拆箱到普通值:
int value = 42;
object boxed = (object)value;
int valueAgain = (int)boxed;
拳击也可以隐式进行:
int value = 42;
object boxed = value;
int valueAgain = (int)boxed;
这将使从字节扩大转换为int:
byte a = 42;
int b = (int)a;
同作品的隐式转换:
byte a = 42;
int b = a;
这会缩小转化次数版为从int到字节,丢掉溢出:
int a = 512;
byte b = (byte)a; // b now contains 0
见http://stackoverflow.com/questions/2483/ – 2010-02-25 18:42:38
http://stackoverflow.com/questions/2139798/why-is-the-c -as-operator-so-popular – 2010-02-25 18:43:16