ggf*_*416 2 .net calling-convention
是否有很好用的inout(参考.NET中的C#,byref(比如输出参数)参数)?
我觉得由参数用作输入和返回值引起的混淆比out参数的数量增加或返回数组或返回自定义类更糟糕.
我遇到的最常见的用途(仍然不常见,IMO)是一种"修改现有对象,或者在必要时创建一个对象".例如:
public void AppendToBuilder(ref StringBuilder builder)
{
if (builder == null)
{
builder = new StringBuilder();
}
builder.Append(/* whatever */);
}
Run Code Online (Sandbox Code Playgroud)
StringBuilder 可能不是一个很好的例子,但这意味着你有时可以避免在不需要时创建一个对象:
public static string DoSomething(IEnumerable<Foo> foos)
{
// For an empty collection or where there aren't any
// frobulating foos, we don't need to create a builder
StringBuilder builder = null;
foreach (Foo foo in foos)
{
if (foo.Frobulates)
{
foo.AppendToBuilder(ref builder);
}
}
return builder == null ? null : builder.ToString();
}
Run Code Online (Sandbox Code Playgroud)
我主要使用它来适应遗留代码.=(com interop).
我也倾向于在需要高效的代码中使用它并指示成功:
bool PerformSomeReadOperation(SomeInput obj, ref int defaultedOutput) { }
Run Code Online (Sandbox Code Playgroud)
返回值是成功或失败的概念,或者可能是错误代码,而defaultedOutput是一个带有默认值的值.
您是否知道out和ref之间没有真正的区别(至少就CLR而言)?
| 归档时间: |
|
| 查看次数: |
320 次 |
| 最近记录: |