C#将文件读入二维数组

C#将文件读入二维数组,c#,multidimensional-array,arraylist,C#,Multidimensional Array,Arraylist,我的项目使用txt文件作为数据库,txt文件中的每一行都类似于“abc、cdf、ghi、zkl” 现在,我从文本文件中逐行读取数据,并将该行按“,”拆分为数组data[] 但是我想把这个数组放到另一个名为datas[]的主数组中,这样我就可以将这个datas[]数组存储在内存中,供整个类使用 我不想修正datas[]数组的大小,因为txt文件记录将不断增长 在这种情况下我能做什么?我试图将datas[]设置为arraylist,然后在其中存储data[]数组,但出现了错误 class user

我的项目使用txt文件作为数据库,txt文件中的每一行都类似于“abc、cdf、ghi、zkl”

现在,我从文本文件中逐行读取数据,并将该行按“,”拆分为数组data[] 但是我想把这个数组放到另一个名为datas[]的主数组中,这样我就可以将这个datas[]数组存储在内存中,供整个类使用

我不想修正datas[]数组的大小,因为txt文件记录将不断增长

在这种情况下我能做什么?我试图将datas[]设置为arraylist,然后在其中存储data[]数组,但出现了错误

class user
{
    ArrayList userDatas = new ArrayList();

    public user()
    {
        readUsers();
    }

    public void readUsers()
    {
        string line;

        StreamReader sr = new StreamReader("user.txt", System.Text.Encoding.Default);

        while ((line = sr.ReadLine()) != null)
        {
            ArrayList temp = new ArrayList();
            string[] rc = line.Split('|');
            for (int i = 0; i < rc.Length; i++)
            {
                temp.Add(rc[i]);

            }
            userDatas.Add(temp);
        }

    }

    public bool login(string ic, string password)
    {
        for (int i = 0; i < userDatas.Count; i++)
        {
            ArrayList temp = userDatas;
            if ((temp[1] == ic) && (temp[2] == password))
            {
                return true;
            }
        }
        return false;
    }
}
类用户
{
ArrayList userDatas=新的ArrayList();
公共用户()
{
readUsers();
}
public void readUsers()
{
弦线;
StreamReader sr=新的StreamReader(“user.txt”,System.Text.Encoding.Default);
而((line=sr.ReadLine())!=null)
{
ArrayList temp=新的ArrayList();
字符串[]rc=line.Split(“|”);
对于(int i=0;i
使用
列表
代替
数组列表
,将
列表
用于temp,将
列表
用于
用户数据

填充完毕后,只需调用
userDatas.ToArray()

此外,您的错误可能在以下位置:

ArrayList temp = userDatas;
if ((temp[1] == ic) && (temp[2] == password))
{
      return true;
}
在引用索引1和2之前,您不会首先检查temp是否有3个或更多元素。另外,为什么创建temp只是为了将其分配给userDatas?为什么不说:

if (userDatas.Count() >= 3 && (userDatas[1] == ic) && (userDatas[2] == password))
   return true;
编辑

根据要求,这是我的原始代码,虽然您已经编写了很多代码,但它在这里(您的代码最初没有出现):

StreamReader=newstreamreader();
列表数据=新列表();
列表数据=新列表();
弦线;
而(!reader.EndOfStream){
line=reader.ReadLine();
data.Add(line.Split(',');
}
字符串[]datas_array=datas.ToArray();

当然,如果你不介意有点可爱的话,你应该可以用LINQ的一行coutesy:

string[][] LinesSplitByComma = File.ReadAllLines("file path").Select(s => s.Split(',')).ToArray();

我现在可以-让我看看你的仍然有效,它只是使用了
ArrayList的通用版本
会更简单、更优雅。再次说明,您遇到了什么错误谢谢,请不要删除您的代码,我正在学习,再次感谢您的帮助不要使用ArrayList()!它现在可以向后兼容旧代码。而且,它看起来像是在明文中存储密码。这是错误的。对密码进行散列(最好使用bcrypt),当用户登录时,对其尝试的密码进行散列并比较散列。
string[][] LinesSplitByComma = File.ReadAllLines("file path").Select(s => s.Split(',')).ToArray();