当前位置:  开发笔记 > 编程语言 > 正文

inout参数有很好的用途吗?

如何解决《inout参数有很好的用途吗?》经验,为你挑选了2个好方法。

是否有很好用的inout(参考.NET中的C#,byref(比如输出参数)参数)?
我觉得由参数用作输入和返回值引起的混淆比out参数的数量增加或返回数组或返回自定义类更糟糕.



1> Jon Skeet..:

我遇到的最常见的用途(仍然不常见,IMO)是一种"修改现有对象,或者在必要时创建一个对象".例如:

public void AppendToBuilder(ref StringBuilder builder)
{
    if (builder == null)
    {
        builder = new StringBuilder();
    }
    builder.Append(/* whatever */);
}

StringBuilder 可能不是一个很好的例子,但这意味着你有时可以避免在不需要时创建一个对象:

public static string DoSomething(IEnumerable 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();
}



2> plinth..:

我主要使用它来适应遗留代码.=(com interop).

我也倾向于在需要高效的代码中使用它并指示成功:

bool PerformSomeReadOperation(SomeInput obj, ref int defaultedOutput) { }

返回值是成功或失败的概念,或者可能是错误代码,而defaultedOutput是一个带有默认值的值.

您是否知道out和ref之间没有真正的区别(至少就CLR而言)?

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有