这篇文章并不是真正关于下面代码中的错误,我自己可以想象几十种方法来解决它,它主要与简单、优雅和性能有关!
我必须做一个非常简单的文本解析器,像这样:
string ParseWord(ref string Line, ref int Pos) {
// Inspect Line from Pos, increment Pos and return next Word
}
void ParseText(string[] Lines) {
foreach (string Line in Lines) {
int Pos = 0;
string Word;
while ((Word = ParseWord(ref Line, ref Pos)) != null) {
// Do something with Word
}
}
}
不幸的是,它不能那样工作,因为“foreach”变量“Line”是通过引用传递的,这是不允许的。
正如您现在可能已经注意到的那样,我通常是一名 C++ 程序员。我的想法是,将字符串作为引用传递会更快,因为不必每次都复制它。
第一个问题:这个假设在 c# 中仍然有效吗?
第二个问题:如何传递对该“行”的引用并仍然使用“foreach” - c# 中没有“const”
第三个问题:我是否在想一些不合适的 C++ 方式以及我们在 C# 中会做不同的事情吗?