作为字符串在处理对象数组时引起了我的问题。执行后的值显示在注释中。它应该以这种方式工作吗?
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"
答案 0 :(得分:10)
是的,应该。
as
是演员
它只能用于将对象强制转换为实际类型(或其超类)。
x as Y
不是null
,则 x
会返回Y
。
答案 1 :(得分:2)
as-operator在无法将对象强制转换为指定类型时返回null。在这种情况下,它无法将0.33转换为类型字符串,因此字符串a为空。
答案 2 :(得分:1)
答案 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()
,大多数类型都会覆盖它以返回有意义的内容。