【问题标题】:Using out to return multiple variables, seems to work but error when trying to output使用 out 返回多个变量,似乎可以工作,但尝试输出时出错
【发布时间】:2019-11-09 11:42:25
【问题描述】:

我必须编写一个在 c# 中使用 out 的小程序。方法接受一个 int 变量和 out 的 5 个其他 int 变量,这些变量在方法内部使用所接受的变量进行修改。

我似乎正确设置了它,代码如下,但是当我尝试将该方法放入 Console.WriteLine () 以查看它是否有效时,我得到了错误。

public static void Init (int num, out int param1, out int param2, out int param3, out int param4, out int param5)
        {
            param1 = num * 2;
            param2 = num * 10;
            param3 = num * 100;
            param4 = num * 1000;
            param5 = num * 10000;
        }

int num = 5 ;

Init(num, out int param1, out int param2, out int param3, out int param4, out int param5);

编写上面的代码似乎可以工作,我说似乎是因为它在 Visual Studio 中没有给出任何错误,并且当我运行它时会执行。

然后当我尝试将 Init 放入 Console.WriteLine 中时:

Console.WriteLine(Init(num, out int param1, out int param2, out int param3, out int param4, out int param5));

我收到错误“参数 1 无法从 void 转换为 bool” 我似乎根本没有任何布尔变量,我很困惑。

【问题讨论】:

    标签: c#


    【解决方案1】:

    确实,Init 不返回任何内容,因此您不能将任何内容 (void) 写入控制台。

    Init 必须返回诸如 int 或 bool 或 tuple 或类之类的类型...或者您应该将其移出并在控制台中写入您想要的内容。

    你或许可以试试这个:

    Init(num, out int param1, out int param2, out int param3, out int param4, out int param5);
    
    Console.WriteLine($"param1={param1}; param2={param2}; param3={param3}; " + 
                      $"param4={param4}; param5={param5}");
    

    这里我们使用$ 进行字符串插值,其中{} 之间的变量被替换为将值写入控制台中提供的字符串。

    【讨论】:

      【解决方案2】:

      Oliver 的回答应该可以为您解决问题。但是,您应该避免在单个方法调用中使用这么多 out 变量。如果您需要返回复杂的数据,您应该定义自己的结构或类来保存所有这些信息,并简单地从方法中返回该类的单个对象。

      如果你懒得这么做,你也可以使用内置的Tuple 类,它可以容纳多个通用变量。在较新版本的 C# 中,您还可以在方法的签名中定义匿名类型。例如:

      public static (int, int, int, int, int) Init (int num)
      {
        return (2, 4, 5, 6, 7);
      }
      

      然后这样称呼它:

      var Result = Init(15);
      Console.Write($"{Result.Item1}, {Result.Item2}...");
      

      甚至更好:

      public static (int x1, int y1, int x2, int y2, int weight) Init(int num)
      {
        return (2, 4, 5, 6, 7);
      }
      

      然后这样称呼它:

      var Result = Init(15);
      Console.Write($"{Result.x1}, {Result.y1}...");
      

      【讨论】:

        【解决方案3】:

        Console 类包含 WriteLine() 重载方法。但是 Init() 方法不返回任何内容。对于您的情况,您将 Init 方法作为 WriteLine() 方法的第一个参数。它应该返回任何值(如 string、bool、int)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-02-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多