不能对类型为'的表达式应用[]索引;c#

本文关键字:应用 索引 表达式 类型 不能 | 更新日期: 2023-09-27 18:02:43

我试图使用包含字符串数组的List,但是当我试图使用方括号访问数组元素时,我收到一个错误。

My List of arrays是这样声明的:

public List<Array> alphabet = new List<Array>();

我还有一个像这样声明的字符串数组:

 string[] encrypted = new string[text.Length];

我可以访问一个数组,但不能访问另一个

string a = alphabet[1][2]; // this gives me an error
string b = encrypted[1]; // this works fine

不能对类型为'的表达式应用[]索引;c#

错误非常简单;你不能在Array上使用索引器。Array类是所有数组类型的基类,数组隐式继承自array。但是,Array本身没有索引器。下面是错误的示例:

int[] numbers = new[] {1, 2, 3, 4, 5};
numbers[2] = 11; // Okay
Array arr = numbers as Array;
arr[2] = 11; // ERROR!

如果你想使用索引器,将元素类型更改为数组,例如:

public List<string[]> alphabet = new List<string[]>();

尝试使用.ElementAt。它适用于任何实现IEnumerable的对象,包括没有索引的集合。

MSDN参考。

我已经把你的语句分成了多个语句,这样更容易识别出错的行。

请注意- ElementAt是一个扩展方法,您需要使用System.Linq命名空间来使用它。

using System.Linq;

然后在你的方法中:

var n = getnumber(text.ElementAt(i));
var items = alphabet.ElementAt(n);
encrypted[i] = items.ElementAt(symnumb).ToString();

您不应该在代码中使用Array类型,因此更改

public List<Array> alphabet = new List<Array>();
例如

public List<string[]> alphabet = new List<string[]>();

public List<List<string>> alphabet = new List<List<string>>();

如果你因为某种原因坚持使用Array,你不能使用expr[i],但必须使用expr.GetValue(i),但我不鼓励它,因为声明的返回类型是object,你最终会有很多强制转换。

你可以这样做,但是你引用数组元素的方式是错误的:

        int[] a4 = {1, 3, 2, 4, 5};
        string[] a5 = new string[5] { "a", "b", "c", "d", "z"};
       
        List<Array> alphabet = new List<Array>();
        alphabet.Add(a4);
        alphabet.Add(a5);
        int x1 = Convert.ToInt32(alphabet[0].GetValue(2));
        string x2 = Convert.ToString(alphabet[1].GetValue(4));
        for (int i = 0; i < alphabet.Count; i++)
        {
            for (int j = 0; j < alphabet[i].Length; j++)
            {
                Console.WriteLine($"element {i} of the alphabet list, element {j} of array =  {alphabet[i].GetValue(j)}");        
            }
        }