【问题标题】:Why I am not getting error with ref keyword为什么我没有收到 ref 关键字错误
【发布时间】:2017-06-08 00:18:02
【问题描述】:

根据定义,ref关键字必须在传递之前进行初始化。而out参数必须在从函数返回之前进行初始化。

下面是我的sn-p。

   public void TestRef(ref string n)
    {

    }

    public void TestOut(out string n)
    {

        n = "Hello"; //if I don't initialize, I gets compile time error. & That's right.

    }

现在在调用方法时。

string name;
TestOut(out name);//fine
TestRef(ref name) // why not throwing error.

在上面的调用中,当我尝试调用 TestRef() 时,我没有初始化 name 参数。但根据我的理解 ref 参数必须在传递之前初始化。

它可以毫无错误地构建和运行。

【问题讨论】:

  • name 已通过对TestOut 的调用初始化。
  • 尝试在TestOut(out name) 之前执行TestRef(ref name) - 你会得到一个编译器错误。
  • @Lee。你说得对。我明白了。愚蠢的错误。谢谢
  • @ZoharPeled。是的。谢谢

标签: c# asp.net ref out


【解决方案1】:

TestOut 保证 name 变量将在方法完成执行时被初始化

out关键字

虽然作为输出参数传递的变量不必是 在被传递之前初始化,被调用的方法需要 在方法返回之前赋值

ref

必须初始化传递给 ref 参数的参数 在通过之前。这与 out 参数不同,其参数 在传递之前不必显式初始化。为了 更多信息,请参阅。

重新排序方法调用,您将看到预期的行为。

【讨论】:

  • 很高兴看到您添加了解释。这会有所帮助:)
【解决方案2】:

调用TestOut方法首先保证name变量的初始化。 重新排序方法调用,您将看到预期的行为。

【讨论】:

    【解决方案3】:

    注释掉该行 TestOut(out name);//fineTestOut(out name);//fine 您将收到以下行的错误 字符串名称; TestRef(ref name) // 为什么不抛出错误。

    【讨论】:

      猜你喜欢
      • 2020-01-16
      • 1970-01-01
      • 2016-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      相关资源
      最近更新 更多