静态int列表索引不能正常工作
本文关键字:工作 常工作 int 列表 索引 不能 静态 | 更新日期: 2023-09-27 18:11:24
我有一个稍后要使用的整型数列表:
public class Strms
{
public static List<int> _AList;
static Strms()
{
_AList = new List<int>();
}
public Strms()
{
_AList.Add(265);
_AList.Add(694);
_AList.Add(678);
_AList.Add(364);
}
}
但是当我尝试使用刚刚创建的列表的索引时,这里:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
var keys = new List<string>();
keys.Add("item1");
keys.Add("item2");
keys.Add("item3");
keys.Add("item4");
foreach (var item in keys.OfType<string>().Select((x, i) => new { x, i }))
{
int ItemNumber = item.i;
int stream = Strms._AList[ItemNumber];
Bass.BASS_ChannelPlay(stream, true);
MessageBox.Show(item.x);
}
}
我收到"Index was out of range"错误。
我哪里做错了?
问题:您的列表没有被填充,因为您是在公共构造函数中填充它,只有在创建它的实例时才会调用它。
解决方案:
这里有三个解
或者像这样修改静态构造函数
static Strms()
{
_AList = new List<int>();
_AList.Add(0);
_AList.Add(1);
_AList.Add(1);
_AList.Add(1);
}
或创建类STRMS的实例来调用公共构造函数。像
Strms s = new Strms();
或一个公共静态方法来填充列表,在foreach循环之前。像
public static void InitializeList()
{
_AList.Add(0);
_AList.Add(1);
_AList.Add(1);
_AList.Add(1);
}
只有在创建Strms
类的实例时才向静态列表添加项。所以在创建实例之前,列表自然是空的。
你有2个构造函数,只有非静态的一个是插入项目到列表中,不会被调用,除非你创建它的实例。要么创建一个实例,要么将代码移到静态构造函数中。
需要在其定义中初始化列表,而不是在类的构造函数中初始化列表,因为它是静态的。尝试使用下面的定义:
public static List<int> _AList = new List<int>{0,1,1,1};
和从其他两个方法中删除代码