2

我正在尝试使用以下代码将一组自定义类实例粘贴到它们的二维数组中的特定位置:

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

…它给了我一个System.InvalidCastException信息Object cannot be stored in an array of this type.

arr.ArrayMyClass[,],并且stripeMyClass[]

我在这里做错了什么?

这行代码是为 2d 平台游戏加载矩形地图的更大方法的一部分。目标是将单独的瓷砖条纹加载到二维数组中,以便它们在更大尺寸的二维瓷砖阵列中形成特定尺寸的矩形。

当然,这可以一点一点地完成,但是没有什么方法可以做到吗?

4

2 回答 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 回答
0

System.InvalidCastException 与消息 Object 不能存储在此类型的数组中。

您将不得不提及indexofstripe数组,您可能必须从中复制值。

    class MyClass
    {
         public string Name {get;set;}
    }

用法:

   // Creates and initializes a one-dimensional array.
    MyClass[] stripe = new MyClass[5];

    // Sets the element at index 3.
    stripe.SetValue(new MyClass() { Name = "three" }, 3);


    // Creates and initializes a two-dimensional array.
    MyClass[,] arr = new MyClass[5, 5];

    // Sets the element at index 1,3.
    arr.SetValue(stripe[3], 1, 3);

    Console.WriteLine("[1,3]:   {0}", arr.GetValue(1, 3));
于 2013-05-30T03:02:28.720 回答