不能对类型为'的表达式应用[]索引;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
错误非常简单;你不能在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)}");
}
}