开发者

C# Should "as string" work like this?

as string caused me a problem when dealing with object arrays. The values after execution are shown in the comments. Should it work this 开发者_开发百科way?

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"


Yes, it should.

as is a cast operator.
It can only be used to cast an object to a type that it actually is (or a superclass thereof).

x as Y returns null if x isn't a Y.


the as-operator returns null when it fails to cast an object to the specified type. in this case it failed to cast 0.33 to type string, so string a is null.


MSDN:

The as operator is like a cast operation. However, if the conversion is not possible, as returns null instead of raising an exception

So yes, the behaviour you are observing is correct.


The as operator is a casting operation, not a conversion operation, so it will only produce the value is the same type, or a super- or sub-class or the type you are trying to cast to.

(Unlike a regular cast, the as operator also does not perform user-defined conversions using the operator keyword.)


"as string" is not a synonym for "ToString()". You are using the "as" operator, and happened to pass it string as a type.

Definition of the as operator:

Remarks

The as operator is like a cast except that it yields null on conversion failure instead of raising an exception. More formally, an expression of the form:

expression as type is equivalent to:

expression is type ? (type)expression : (type)null


The 'as' operator is basically like casting into a System.Type however the only difference is that it returns a null value if the cast fails instead of throwing an exception.

Check out this link for more info http://msdn.microsoft.com/en-us/library/cscsdfbt(v=vs.71).aspx


array[0] is a double and cannot be casted to string, hence null.
Call ToString(), most types override it to return something meaningful.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜