0

私の理解から、このコード行

Array.Copy(intArray, intArray2, intArray.Length);

どちらも intArray の要素を intArray2 にコピーし、Destination Array の長さを指定します。ただし、最後のパラメーターとしての intArray.Length がコピー先のインデックスの範囲を指定することも意味します。

例えば:

using System;
public class myClass{
    public static void Main(){

        int[] intArray = new int[] {1,2};
        int[] intArray2 = new int[intArray.Length + 1];
        Array.Copy(intArray, intArray2, intArray.Length);
        intArray = intArray2;
        foreach(int i in intArray){
            Console.Write(intArray[i]);
        }
    }
}

なぜこれは201を出力するのですか?

4

1 に答える 1

3

配列のサイズは変更されません。あなたがしていることを見てください。

これにより、長さまたは 2 で新しい配列が初期化されます。配列の作成

int[] intArray = new int[] {1,2};
int[0] = 1
int[1] = 2

この行は、長さ 3 の新しい配列を作成します

int[] intArray2 = new int[intArray.Length + 1];

intArray.Length は 2 を返し、それに 1 を追加します。intArray2 の長さを 3 にします。

デフォルトでは、すべての int 配列値は intArray2 で 0 に設定されます。

すなわち

intArray2[0] = 0 
intArray2[1] = 0 
intArray2[2] = 0

Copy 関数は、値を intArray から intArray2 にコピーしています

intArray2[0] = 1
intArray2[1] = 2 
intArray2[2] = 0

この線

intArray = intArray2 

値を intArray にコピーしません。intArray2 のアドレスを intArray にポイントします。

foreach ループの記述方法により、配列は次のように出力されます。

intArray[1] = 2
intArray[2] = 0
intArray[0] = 1

それは次のように書かれるべきです

foreach(int i in intArray)
{
    Console.Write(i);
}

アップデート

私の理解から、このコード行

Array.Copy(intArray, intArray2, intArray.Length);

どちらも intArray の要素を intArray2 にコピーし、Destination Array の長さを指定します。ただし、最後のパラメーターとしての intArray.Length がコピー先のインデックスの範囲を指定することも意味します。

これらの両方のステートメントで、あなたは完全に正しくありません。

Array.Copyメソッドのパラメーター、特に最後に参照するパラメーターは、元の配列からコピーする要素の数です。宛先配列の長さは指定されません。単語の範囲の使用も、まったく正しくありません。それは(私見)

Array.Copy(intArray, intArray2, startIndex, endIndex);

.NET Framework には存在しないと思います。

于 2013-07-23T14:51:02.580 に答える