15

ここに私のコードがあります: float を返すArrayListの ArrayList:

public ArrayList walls=new ArrayList(); 

public void Start()
{
    walls[0] = ReturnInArrayList(279,275,0,0,90);
    walls[1] = ReturnInArrayList(62,275,0,0,0);
    walls[2] = ReturnInArrayList(62,275,62,0,90);
    walls[3] = ReturnInArrayList(217,275,62,-62,0);
    walls[4] = ReturnInArrayList(62,275,279,0,90);
    walls[5] = ReturnInArrayList(41,275,279,0,0);
    walls[6] = ReturnInArrayList(279,275,320,0,9);
    walls[7] = ReturnInArrayList(320,275,0,-279,0); 

    for (int i = 0; i < walls.Length; i++) {
        float a = (float)walls[i][0];
        float b = (float)walls[i][1];
        float c = (float)walls[i][2];
        float d = (float)walls[i][3];
        float e = (float)walls[i][4];
    }
}

ArrayList ReturnInArrayList(float a,float b,float c, float d, float e)
{
    ArrayList arrayList = new ArrayList();
    arrayList.Add(a);
    arrayList.Add(b);
    arrayList.Add(c);
    arrayList.Add(d);
    arrayList.Add(e);
    return arrayList;
}

次のエラーが表示されます。

エラー CS0021: [] を使用したインデックス作成を「オブジェクト」型の式に適用することはできません

私はすでにキャスティングを行っていますが、何が問題なのですか? :(

4

4 に答える 4

11

問題は、インデクサーの戻り値の型であるをparedes[i]返すことです。アクセスできるようにするには、これを にキャストする必要があります。objectArrayListArrayList

float a= (float)((ArrayList)paredes[i])[0];

ただし、より良い解決策は、ジェネリックを使用して、List<float>代わりに a を設定することです。

List<float> RetornaEmList(float a,float b,float c, float d, float e)
{
    return new List<float> { a, b, c, d, e };
}

thenparedesは aList<List<float>>で、アクセサは次のように変更できます。

float a = paredes[i][0];
于 2012-12-22T16:28:04.753 に答える
1

キャストはどこでやってるの?

私はそれがなければならないと言うでしょう(コンパイラで試していませんでした):

for (int i = 0; i < paredes.Length; i++)
{           
    float a=(float)((ArrayList)paredes[i])[0];
    ...                   
}

代わりにジェネリック コレクションを使用することを検討しましたか?

public List<List<float>> paredes = new List<List<float>>();   
于 2012-12-22T16:28:10.100 に答える