【问题标题】:What is the difference between ref and out? [duplicate]ref 和 out 和有什么不一样? [复制]
【发布时间】:2014-09-02 08:39:36
【问题描述】:

当我通过替换 out 关键字尝试使用 ref 关键字时,以下代码中没有错误。当我尝试使用 out 而不是 ref 时,会出现类似“未分配的 OUT 参数”的错误 这个错误是什么意思?

   static void Main()
    {
        string test = "34";
        addOneToRefParam(out test);
        Console.WriteLine("test is : " + test);
    }

    public static void addOneToRefParam(out string i)
    {
        int  k =Convert.ToInt32(i) + 1;
        i = Convert.ToString(k);
        Console.WriteLine("i is : " + i);
    }

【问题讨论】:

  • 我希望有一个搜索引擎可以找到此类问题的答案。我敢打赌 URL 应该是这样的 google.com/search?q=csharp+ref+out
  • @derape 这也是一个令人印象深刻的 UI 模型;荣誉。应该有人这样做。
  • 次要:就 CLI 而言:“绝对没有”。 refout 之间的差异恰好为零,只是其中恰好有一个它不感兴趣的属性。这里的所有差异完全在编译器级别。
  • 您既不需要ref,因为您不需要修改它,也不需要out,因为您需要它作为输入参数。你只想要string i

标签: c#


【解决方案1】:

ref 参数必须在传递给函数之前进行初始化,参数可能会或可能不会被函数更改。因此您需要在传递之前对其进行初始化,就像您使用 non-ref 论据:

int i; 
Foo(i); // error unassigned variable
Foo(ref i) // same error

对于out,你的函数保证它将参数设置为一个值。因此它不需要被初始化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 2010-11-04
    • 2022-01-15
    • 2018-04-25
    • 1970-01-01
    • 2014-07-24
    • 2010-09-28
    相关资源
    最近更新 更多