Does C# support inout parameters?
在c中,我使用
阅读每一行都会伴随一些测试(例如,以
当我把这个函数定义为
所以,问题很简单:我如何指定这个变量是一个
在这种情况下,需要一个内;对于
另请参见:何时使用REF与OUT
正如大家所说,您可以简单地使用
我建议你换一种方法,让你知道。
您可以编写一个返回
1 2 3 4 5 | public class Line { public string Text; public int Number; } |
然后,您读取行的方法可能如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public IEnumerable<Line> ReadLines(StreamReader sr) { int number = 0; while (true) { string line = sr.ReadLine(); if (line == null) break; ++number; if (wantLine(line)) // Some predicate which decides if you want to keep the line. yield return new Line{Text = line, Number = number}; } } |
然后您可以使用它,如下所示:
1 2 3 4 5 6 7 8 9 10 | public void Test() { StreamReader sr = new StreamReader("Whatever"); foreach (var line in ReadLines(sr)) { if (line.Text =="SomeSpecialValue") doSomethingWith(line.Text, line.Number); } } |
这是更多的工作要写,但我认为它可以导致更清晰的代码,而且它还有一个优点,即行号计数器完全隐藏在
裁判是你需要的
MSDN
The ref method parameter keyword on a method parameter causes a method
to refer to the same variable that was passed into the method. Any
changes made to the parameter in the method will be reflected in that
variable when control passes back to the calling method.
使用ref关键字而不是out。这将强制调用方在调用之前初始化参数。
来自msdn-ref(c)
An argument passed to a ref parameter must first be initialized.
Compare this to an out parameter, whose argument does not have to be
explicitly initialized before being passed to an out parameter.