3

String.Format は、文字列の配列では問題なく正しく動作しますが、int の配列を処理すると例外が発生して失敗します。

インデックス (ゼロベース) は、ゼロ以上で、引数リストのサイズ未満でなければなりません。

        string result = null;
        var words = new string[] { "1", "2", "3" };
        result = String.Format("Count {0}{1}{2}", words); //This works.

        var nums = new int[] { 1, 2, 3 };
        result = String.Format("Count {0}{1}{2}", nums); //This throws an exception.

これはなぜですか?

4

2 に答える 2

7

これは、string.Format使用しているオーバーロードが Want であるために発生しますobject[]。Astringは参照型であるため、string[]暗黙的に にキャストできますobject[]int、値型であり、オブジェクトの配列に入れる前にボックス化する必要があります。したがって、使用しているときにint、パラメーターを 1 つだけ受け取る別のオーバーロードを選択し、各 int を単独で渡すのではなく、全体int[]を単一のオブジェクトとして渡します。

于 2013-10-10T16:39:27.297 に答える
4

int の配列に対して ToString() メソッドが呼び出されるためです。そしてそれは1つのオブジェクトになります。このコード:

var nums = new int[] { 1, 2, 3 };
result = String.Format("Count {0}", nums);

結果: Count System.Int32[]

于 2013-10-10T16:40:22.447 に答える