【问题标题】:Method that takes Input from user in C#在 C# 中从用户获取输入的方法
【发布时间】:2017-04-01 11:34:55
【问题描述】:

我正在从 C++ 切换到 C#,并且正在尝试学习这些方法。您能帮我创建一个将 2 个变量作为用户输入的方法吗?在 C++ 中,只需创建一个 void 方法并在变量名称前添加 & 就非常容易,例如:void Input( int &a, int &b) 这将保存主函数中其值的任何更改。有没有办法在 C# 中做到这一点?

【问题讨论】:

标签: c# methods pass-by-reference


【解决方案1】:

在 C# 中,对于 C++ 的 T &x,您有两个选项:

  • ref 参数 - 这些具有与 C++ 引用参数相同的功能,并且
  • out 参数 - 这些允许将数据从方法传回,但不能传入方法。

在您的情况下,out 更合适,因为它可以让您传递以前未分配的变量:

void Input( out int a, out int b) {
    ... // Read and assign a and b
}

你可以这样调用这个方法:

// In C# 7
Input(out int a, out int b);    
// Prior to C# 7
int a, b;
Input(out a, out b);

请注意,与 C++ 自动获取引用不同,C# 要求您使用关键字 out 对其进行标记。

【讨论】:

  • 对于out参数必须在函数成员正常完成前赋值。
  • out 是 OP 问题的正确答案吗?他提到他想从用户输入中更改变量,这意味着变量已经分配。因此,out 不起作用,应该使用ref
  • @brykneval 对,这正是执行输入的方法中应该发生的事情。
  • @NuclearPenguin 我很确定这是一个不幸的措辞选择:C++ 没有out 变量的概念,所以如果你通过指针或引用传递一些东西,它总是一个“变化”,不是初始任务。 C# 让您可以灵活地决定是否需要原始值。使用ref 的副作用是需要在调用之前分配变量。
【解决方案2】:

您可以使用ref (C# Reference) 实现此目的。这等于 C++ & 引用。

一个例子:

class RefExample
{
    static void Method(ref int i)
    {
        // The following statement would cause a compiler error if i
        // were boxed as an object.
        i = i + 44;
    }

    static void Main()
    {
        int val = 1;
        Method(ref val);
        Console.WriteLine(val);

        // Output: 45
    }
}

值得一提的是,ref 在 C# 中的使用应该很少见,这与在 C++ 中不同。参数传递请参考Jon Skeet's文章。

【讨论】:

    【解决方案3】:

    在 C# 中,您可以使用 ref keyword通过引用传递参数。所以你可以像这样定义你的方法:

    public void Input (ref int foo, ref int bar) {
        foo = 14;
        bar = 25;
    }

    您也使用 ref 关键字调用方法

    int a = 0;
    int b = 0;
    Input(ref a, ref b);
    // now a = 14 and b = 25

    您在此明确提到了按引用传递(但优点是在语法上很明显这是按引用传递)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 2021-03-10
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多