Ole*_*ann 3 c# string performance const ref
这篇文章并不是真正关于下面代码中的错误,我自己可以想象解决它的几十种方法,它主要与简单,优雅和性能有关!
我必须做一个非常简单的文本解析器,类似的东西:
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,它不起作用,因为"foreach"变量"Line"是通过引用传递的,这是不允许的.
你可能已经注意到我现在通常是一个C++程序员.我的想法是将字符串作为引用传递会更快,因为它不必每次都被复制.
第一个问题:这个假设在c#中仍然有效吗?
第二个问题:我怎样才能传递对"Line"的引用并仍然使用"foreach" - c#中没有"const"
第三个问题:我是否在思考一些不恰当的C++方式以及我们在c#中做了哪些不同的事情?
Jon*_*ood 11
不,这不是一个有效的假设.默认情况下,C#通过引用传递字符串,这意味着指针在引擎盖下有效传递.
使用ref或传递字符串的唯一原因out是,如果被调用的方法需要修改字符串,并且需要在调用方法中反映该修改.因为字符串是不可变的,所以"更改"目标方法中的字符串实际上会创建一个新字符串,这不会影响最初传递的字符串.在这种情况下,使用ref或out将使调用方法中的指针更新为指向新的,已修改的字符串.
如果你没有改变字符串,那么只需正常传递字符串,它就非常有效.我会推荐诸如C#Concepts:Value vs Reference Types之类的文章.
| 归档时间: |
|
| 查看次数: |
1890 次 |
| 最近记录: |