C#:字符串[]行,使用2D字符数组和tocharray()存储每行?

C#:字符串[]行,使用2D字符数组和tocharray()存储每行?,c#,arrays,loops,parsing,char,C#,Arrays,Loops,Parsing,Char,我正在努力找出如何解析出存储文件行的字符串数组[]。 我想将每一行存储在2d字符数组的一个点中。。。我希望它看起来像这样: 字符[,]={(l,i,n,e,1),(l,i,n,e,2),(l,i,n,e,3),…}; 等等 我有一个for循环,我正在使用它来尝试解析每个点,甚至只是解析成一个大的char数组 for (int j = 0; j <= len; j++) // increment through the contents of each line in this for

我正在努力找出如何解析出存储文件行的字符串数组[]。 我想将每一行存储在2d字符数组的一个点中。。。我希望它看起来像这样: 字符[,]={(l,i,n,e,1),(l,i,n,e,2),(l,i,n,e,3),…}; 等等

我有一个for循环,我正在使用它来尝试解析每个点,甚至只是解析成一个大的char数组

for (int j = 0; j <= len; j++)   // increment through the contents of each line in this for statement
    {
        int count = 0;
        chararrayoftags[count] = linesArray[j].ToCharArray();
        //array2Db = linesArray[j].ToCharArray();

        count++;

    }

for(int j=0;j如果您真的在寻找类似2d字符数组的东西,
File.ReadAllLines()
返回一个
字符串[]
,每个
字符串在大多数情况下都起作用,就像
char[]
。因此,我不必费心创建2D数组。对于真正的2D数组,文档中需要有固定的宽度,这在这种情况下没有多大意义。您可能要求使用锯齿状数组,可以得到如下结果:

char[][] arr = File.ReadAllLines("filename").Select(l => l.ToCharArray()).ToArray();
但如果您真的要解析MathML,我建议您使用xml解析库。XDocument及其相关类可能更容易推理:

foreach(var applyElement in XDocument.Load("filename").Descendants("apply"))
{

}

使用2D
char
数组有什么意义?如果您已经有了一个
string[]
行数组,只需通过
string[]
数组直接访问每一行,并根据需要对
string
执行操作。或者我在这里遗漏了什么吗?我想这是我可以做的,我的目的基本上是解析出来mathml文件中的“标记”。我需要读取我不熟悉mathml,但它看起来就像一个xml文件结构。查看xml解析库,因为如果您自己尝试这样做,那么一旦您需要处理任何并非绝对琐碎的事情,您将陷入痛苦的世界。简言之:不要自己做这类工作。有库可以完成您所需要的。我知道是的!!!!!但这是一项工作任务,我只是在做我被告知的事。:(欢迎来到StackOverflow。很抱歉你过去有过不好的经历。希望我们能帮助你改变这一点。你被告知什么…确切地说?有人说,“我需要这个方法来返回包含文件内容的二维数组?”还是更像,“我需要你写一些东西来查找MathML文件中所有标记的名称?"非常感谢您的帮助!您不会相信第一部分对我有多大帮助!我发现锯齿数组的概念非常有趣…它如何知道为数组分配多少内存?由于C#的内存模型是如何工作的,数组位于堆中,引用它们的变量只是指针。这意味着每个try in the outer array只是指向堆中某个地方的另一个数组的指针,因此系统只需要知道将有多少“行”就可以确定为该数组分配多少空间:内部数组的大小不会影响为外部数组分配的空间
ReadAllLines()
计算出要创建的数组有多大,这与任何arraylist实现(如C#的列表)的工作原理类似:它首先填充一个小数组,每次空间用完时分配一个更大的数组(通常是大小的两倍)并将条目复制到该数组的前面。读取完成后,它可以看到实际需要的空间,并将所有值复制到一个全新的数组中,该数组的大小正好相同。如果输入参数知道它有多大,有时
ToArray()
可以预先猜测正确的大小。