静态int列表索引无法正常工作

时间:2014-07-03 00:28:33

标签: c#

我有一份我将在稍后使用的整体列表:

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

    }

我收到&#34;指数超出范围&#34;错误。

我在这里做错了什么?

4 个答案:

答案 0 :(得分:2)

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

解决方案:

这里有3个解决方案

要么像这样更改静态构造函数

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

答案 1 :(得分:1)

在创建Strms类的实例时,您只是将项添加到静态列表中。因此,在创建实例之前,列表自然是空的。

答案 2 :(得分:0)

您有2个构造函数,只有非静态构造函数将项目插入到列表中,除非您创建它的实例,否则不会调用它们。创建一个实例或将该代码移动到静态构造函数中。

答案 3 :(得分:0)

您需要在其定义中初始化列表,而不是在类的构造函数中,因为它是静态的。请尝试使用此定义:

public static List<int> _AList = new List<int>{0,1,1,1};

并从其他两种方法中删除代码。