为什么我不能在c#中为这个数组赋值?

时间:2013-07-31 20:08:29

标签: c#

我正在试图找出我可以知道用户在我的应用程序上在线的方式,因此这些数据我将其保存到文本文件中,但是当尝试逐行阅读文本文件时,我想通过它进入数组以更好地比较数据。 所以这就是我的做法:

String folder = Application.StartupPath;
String file = "users.txt";

String str;
String[] strArray;
String[][] data;
int rows = 0;
StreamReader lines = new StreamReader(folder + file);
while ((str = lines.ReadLine()) != null)
{
    strArray = str.Split('~');
    for (int i = rows; i <= rows; i++)
    {
        for (int j = 0; j < strArray.Length; j++)
        {
            data[rows][j] = strArray[j]; // here is the error
        }
    }
    rows++;
}

如您所见,我之前已经声明了我的数据数组,但它表示无法使用它因为未分配。

提前致谢。

6 个答案:

答案 0 :(得分:4)

有关错误的解释,您需要查看锯齿状数组。关键是你需要初始化外部数组和内部数组:

int[][] jagged = new int[5][];  // Initialized outer array
jagged[0] = new int[3];         // Initialized an inner array

但是,由于您不知道提前需要多少行,所以应该使用列表:

List<List<String>> data = new List<List<String>>();
while ((str = lines.ReadLine()) != null)
{
    data.Add(str.Split('~').ToList());
}

或者,如果您只想要一个列表:

List<String> data = new List<String>();
while ((str = lines.ReadLine()) != null)
{
    data.AddRange(str.Split('~'));
}

答案 1 :(得分:2)

您没有使用任何内容初始化数组。也许List<List<string>>可能更好。

答案 2 :(得分:0)

将数组初始化为空值并完成

String[][] data = null;

答案 3 :(得分:0)

稍微改进了你的代码。还使用了List of String而不是array。

    String folder = Application.StartupPath;
    String file = "users.txt";
    String str;

    var strings = new List<string>();
    int row = 0;
    using (var reader = new StreamReader(Path.Combine(folder,file))
    {
    while ((str = reader.ReadLine()) != null)
    {
        var splitArray = str.Split('~');
        foreach (var str in splitArray)
        {
         strings.Add(str);
        }
    }
    }

答案 4 :(得分:0)

要创建并填充数组,您需要知道结果大小。如果您使用LINQ并将数组创建作为最后一步,则可以在一个语句中将其关闭:

var data = File.ReadLines(Path.Combine(Application.StartupPath, "users.txt"))
               .Select(line => line.Split('~'))
               .ToArray();

答案 5 :(得分:-1)

String[][] data = new String[][];

你需要初始化它