静态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"错误。

我哪里做错了?

静态int列表索引不能正常工作

问题:您的列表没有被填充,因为您是在公共构造函数中填充它,只有在创建它的实例时才会调用它。

解决方案:

这里有三个解

或者像这样修改静态构造函数

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};

和从其他两个方法中删除代码