2

次のコードを使用して、カスタム クラス インスタンスの配列を特定の位置にあるそれらの 2 次元配列に貼り付けようとしています。

arr.Array.SetValue(stripe, topleft.X, topleft.Y);

…そしてそれは私System.InvalidCastExceptionにメッセージを与えますObject cannot be stored in an array of this type.

arr.ArrayですMyClass[,]、そしてstripeですMyClass[]

ここで何が間違っていますか?

このコード行は、2D プラットフォーマーの長方形のマップをロードするより大きなメソッドの一部です。目標は、タイルの個別のストライプを 2d 配列にロードして、より大きな次元のタイルの 2d 配列内で特定の次元の四角形を形成することです。

もちろん少しずつでもいいのですが、それができる方法はないのでしょうか。

4

2 に答える 2

1

2 次元配列の代わりに長い 1 次元配列を使用することをお勧めします。次に例を示します。

static void Main(string[] args)
{
    int rows = 100, cols = 100;
    // array has rows in sequence
    // for example:
    //  | a11 a12 a13 |    
    //  | a21 a22 a23 | = [ a11,a12,a13,a21,a22,a23,a31,a32,a33]
    //  | a31 a32 a33 |    
    MyClass[] array=new MyClass[rows*cols];
    // fill it here

    MyClass[] stripe=new MyClass[20];
    // fill it here

    //insert stripe into row=30, column=10
    int i=30, j=10;
    Array.Copy(stripe, 0, array, i*cols+j, stripe.Length);

}
于 2013-05-30T18:41:48.520 に答える