1

文字列がオブジェクト配列を扱うときに問題を引き起こしたので。実行後の値はコメントに示されています。このように機能する必要がありますか?

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は戻りますY

于 2011-08-05T13:45:12.813 に答える
2

as-operatorは、オブジェクトを指定された型にキャストできない場合、nullを返します。この場合、文字列型に0.33をキャストできなかったため、文字列aはnullになります。

于 2011-08-05T13:46:58.340 に答える
1

MSDN

as演算子は、キャスト操作のようなものです。ただし、変換が不可能な場合は、例外を発生させる代わりにnullを返します。

そうです、あなたが観察している行動は正しいです。

于 2011-08-05T13:47:00.640 に答える
1

as演算子はキャスト操作であり、変換操作ではないため、同じタイプ、スーパークラス、サブクラス、またはキャストしようとしているタイプの値のみが生成されます。

(通常のキャストとは異なり、asオペレーターはキーワードを使用してユーザー定義の変換も実行しませんoperator。)

于 2011-08-05T13:47:58.910 に答える
0

array[0]はであり、doubleにキャストすることはできません。stringしたがって、null
を呼び出しToString()ます。ほとんどのタイプはそれをオーバーライドして、意味のあるものを返します。

于 2011-08-05T13:51:35.687 に答える
0

「asstring」は「ToString()」の同義語ではありません。「as」演算子を使用していて、たまたま文字列を型として渡しました。

as演算子の定義:

備考

as演算子は、例外を発生させる代わりに変換の失敗時にnullを生成することを除いて、キャストに似ています。より正式には、次の形式の式:

タイプとしての式は、次と同等です。

式はタイプですか?(タイプ)式:(タイプ)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 に答える