c#out参数,为什么我已将值分配给变量,仍然无法返回?

时间:2018-08-24 10:58:17

标签: c# oop scope reference out

我有一个简单的方法,如下所示,

        private int Increment(out n) {
            int n = 46;
            return n++;
        }

据我了解,使用out必须先初始化变量,但仍然出现

错误
return n++ 
  

必须在控制离开当前方法之前将out参数'n'分配给

我的变量也出错

int n = 46;
  

不能在此范围内声明名为“ n”的本地或参数,因为该名称在封闭的本地范围内用于定义本地或参数

我的问题是,为什么我不能在方法内部声明新变量,看来我必须在方法外部声明变量,然后在方法内部分配值。

如果我刚出去,那意味着我必须将int变量传递给我的方法,我不能在方法内部创建吗?并在我的方法中声明的参数指针之外?

4 个答案:

答案 0 :(得分:4)

out声明“声明”了变量,您只需在方法中设置即可

private int Increment(out int n)
{
    n = 46;
    return n++;
}

请注意,此方法返回46,但是n是47。

答案 1 :(得分:1)

您可以这样编写方法。它将返回完美的输出。

private int Increment(out int n)
{
    n = 46;
    n++;
    return n;
}

这将返回47作为输出。

答案 2 :(得分:0)

不确定您要做什么,但这不是它的工作方式。 看一下示例(它不是递增数字的最简单方法,它只是refout参数的工作原理的一个POC。)

static void Main(string[] args)
{
    int incrementingNumber = 0;

    while(true)
    {
        Increment(ref incrementingNumber, out incrementingNumber);

        Console.WriteLine(incrementingNumber);
        Thread.Sleep(1000);
    }
}

private static void Increment(ref int inNumber ,out int outNumber)
{
    outNumber = inNumber + 46;
}

输出为: 46 92 138 184 230 276 322 368 414 460 506 552

答案 3 :(得分:0)

  1. 基本上,您没有正确地声明n。
  2. 然后在函数(第3行)中,由于已经声明了n,因此无法再次将其声明为int。
  3. 您的函数将始终返回46,因为您正在第3行到46中重新分配它
  4. 您的函数将返回46,但会将n设置为47,不确定是否是您想要的。

如果只想增加1,则可以在任何地方运行此代码:

n++; // increment n by 1

n += 46; // increment n by 46

如果您真的想要一个函数,我怀疑您同时需要out int nreturn n

此代码将使变量n增加:

private static void Main()
{
    int n = 46;
    // some code here
    IncrementByOne(ref n);
    Console.WriteLine("N = " + n);
}    

/// this function will increment n by 1
private static void IncrementByOne(ref int n) { n++; }

此代码将返回一个递增的整数

private static void Main ()
{
    int n = 46;
    // some code here
    n = IncrementByOne(n);
    Console.WriteLine("N = " + n);
}    

/// this function will return an integer that is incremented by 1
private static int IncrementByOne(int n)
{
    n++; //increment n by one
    return n;
}

如果要在函数中声明n,则必须更早声明

static void Main(string[] args)
{
    int n = 46; // you have to set n before incrementing
    // some code here
    IncrementByOne(out n);
    Console.WriteLine("N = " + n);
}
/// this function will always set variable n to 47
private static void IncrementBy47(out int n)
{
    n = 46; // assign n to 46
    n++; // increase n by one
}

这也可以缩短:

/// This function will always set variable n to 47
private static void SetVarTo47(out int n) { n = 47; }

希望能帮助他们了解自己的工作。