为什么可以';我给这个数组赋值,单位是c#?

为什么可以';我给这个数组赋值,单位是c#?,c#,C#,我正在尝试了解如何知道用户在我的应用程序上在线,因此我将这些数据保存到文本文件中,但当尝试逐行读取文本文件时,我希望将其传递到数组中,以便更好地比较数据。 我是这样做的: String folder = Application.StartupPath; String file = "users.txt"; String str; String[] strArray; String[][] data; int rows = 0; StreamReader lines = new StreamRe

我正在尝试了解如何知道用户在我的应用程序上在线,因此我将这些数据保存到文本文件中,但当尝试逐行读取文本文件时,我希望将其传递到数组中,以便更好地比较数据。 我是这样做的:

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++;
}
String folder=Application.StartupPath;
String file=“users.txt”;
字符串str;
字符串[]strArray;
字符串[][]数据;
int行=0;
StreamReader线条=新StreamReader(文件夹+文件);
而((str=lines.ReadLine())!=null)
{
strArray=str.Split('~');
for(int i=行;i

您需要初始化它。

您没有用任何东西初始化数组。也许一个
列表
可能更好。

初始化数组使其具有空值,您就完成了

String[][] data = null;

对于错误的解释,您需要查看交错数组。关键是您需要初始化外部数组和内部数组:

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());
}
列表数据=新列表();
而((str=lines.ReadLine())!=null)
{
data.Add(str.Split('~').ToList());
}
或者,如果您只需要一个列表:

List<String> data = new List<String>();
while ((str = lines.ReadLine()) != null)
{
    data.AddRange(str.Split('~'));
}
列表数据=新列表();
而((str=lines.ReadLine())!=null)
{
data.AddRange(str.Split('~');
}

改进了您的代码。还使用了字符串列表而不是数组

    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);
        }
    }
    }
String folder=Application.StartupPath;
String file=“users.txt”;
字符串str;
var strings=新列表();
int行=0;
使用(var reader=newstreamreader(Path.Combine(文件夹、文件))
{
而((str=reader.ReadLine())!=null)
{
var splitArray=str.Split('~');
foreach(splitArray中的var str)
{
strings.Add(str);
}
}
}

要创建和填充数组,您需要知道结果大小。如果使用LINQ并将创建数组作为最后一步,您可以在一条语句中完成此操作:

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

“数据”从未初始化。您的第一个for循环是无用的。您有什么错误?这是否为您编译?这仍然需要创建和添加内部列表。
var data = File.ReadLines(Path.Combine(Application.StartupPath, "users.txt"))
               .Select(line => line.Split('~'))
               .ToArray();