无法将带有[]的索引应用于类型为`object'的表达式

Jam*_*esB 11 c# indexing arraylist object

这是我的代码:ArrayList的ArrayList,它返回一个float:

public ArrayList paredes=new ArrayList();   

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

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

ArrayList RetornaEmArrayList(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;
}
Run Code Online (Sandbox Code Playgroud)

它给了我以下错误:

错误CS0021:无法将带有[]的索引应用于类型为`object'的表达式

我已经做了铸造,出了什么问题?:(

Lee*_*Lee 9

问题是paredes[i]返回一个索引器object的返回类型ArrayList.您需要将其强制ArrayList转换为能够访问它:

float a= (float)((ArrayList)paredes[i])[0];
Run Code Online (Sandbox Code Playgroud)

一个更好的解决方案是使用泛型并填充一个List<float>代替:

List<float> RetornaEmList(float a,float b,float c, float d, float e)
{
    return new List<float> { a, b, c, d, e };
}
Run Code Online (Sandbox Code Playgroud)

然后paredes是一个List<List<float>>,您的访问者可以更改为:

float a = paredes[i][0];
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢。我正在使用 foreach (var row in dt.Rows) {} 迭代数据表中的行,但它无法识别典型的行 ["ID"]。一旦我将 var 更改为 DataRow 一切正常。 (2认同)