1

as string 在处理对象数组时给我带来了问题。执行后的值显示在注释中。它应该以这种方式工作吗?

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"
4

7 回答 7

10

是的,它应该。

as是一个强制转换运算符。
它只能用于将对象转换为它实际上是的类型(或其超类)。

x as Ynull如果x不是 a则返回Y

于 2011-08-05T13:45:12.813 回答
2

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

于 2011-08-05T13:46:58.340 回答
1

MSDN

as 运算符类似于强制转换操作。但是,如果无法进行转换,则 as 返回 null 而不是引发异常

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

于 2011-08-05T13:47:00.640 回答
1

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

(与常规转换不同,as运算符也不使用operator关键字执行用户定义的转换。)

于 2011-08-05T13:47:58.910 回答
0

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

as 运算符的定义:

评论

as 运算符类似于强制转换,只是它在转换失败时产生 null 而不是引发异常。更正式地,形式的表达:

作为类型的表达式等价于:

表达式是类型?(类型)表达式:(类型)空

于 2011-08-05T13:47:47.997 回答
0

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

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

于 2011-08-05T13:49:53.820 回答
0

array[0]是 adouble并且不能转换为string,因此null.
调用ToString(),大多数类型都会覆盖它以返回有意义的东西。

于 2011-08-05T13:51:35.687 回答