C#应该“as string”这样工作吗?

时间:2011-08-05 13:44:21

标签: c# string-conversion

作为字符串在处理对象数组时引起了我的问题。执行后的值显示在注释中。它应该以这种方式工作吗?

object[] array = new object[2]; 
array[0] = 0.33;
array[1] = "0.33";
string a = array[0] as string; // a == null !!!??????
string b = array[1] as string; // b == "0.33"
string a2 = array[0] == null ? "" : array[0].ToString(); // a2 == "0.33"
string a3 = Convert.ToString(array[0]); // a3 == "0.33"

7 个答案:

答案 0 :(得分:10)

是的,应该。

as是演员 它只能用于将对象强制转换为实际类型(或其超类)。

如果x as Y不是null,则

x会返回Y

答案 1 :(得分:2)

as-operator在无法将对象强制转换为指定类型时返回null。在这种情况下,它无法将0.33转换为类型字符串,因此字符串a为空。

答案 2 :(得分:1)

MSDN

  

as运算符就像一个强制转换操作。但是,如果转换   是不可能的,因为返回null而不是引发异常

所以是的,你观察到的行为是正确的。

答案 3 :(得分:1)

as运算符是一个转换操作,而不是转换操作,因此它只会生成相同类型的值,或者超级或子类或您尝试转换为的类型。

(与常规广告投放不同,as运算符也不会使用operator关键字执行用户定义的转化。)

答案 4 :(得分:0)

“as string”不是“ToString()”的同义词。您正在使用“as”运算符,并且碰巧将字符串作为类型传递。

Definition of the as operator:

说明

as运算符就像一个转换器,除了它在转换失败时产生null而不是引发异常。更正式地说,表达形式:

表达式作为类型 相当于:

表达式是什么类型? (type)expression:(type)null

答案 5 :(得分:0)

'as'运算符基本上就像是转换为System.Type,但唯一的区别是如果转换失败而不是抛出异常,它会返回一个空值。

查看此链接以获取更多信息 http://msdn.microsoft.com/en-us/library/cscsdfbt(v=vs.71).aspx

答案 6 :(得分:0)

array[0]double,无法投放到string,因此null
调用ToString(),大多数类型都会覆盖它以返回有意义的内容。