Параметр c # out, почему я присвоил значение моей переменной, все еще не могу вернуть? - PullRequest
0 голосов
/ 24 августа 2018

У меня есть простой метод, как показано ниже,

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

, насколько я понимаю, использование out должно сначала инициализировать переменную, но я все равно получил ошибку

return n++ 

Выходной параметр 'n' должен быть назначен до того, как управление покинет текущий метод

Я также получил ошибку моей переменной

int n = 46;

Локальный или параметрnamed 'n' не может быть объявлен в этой области, потому что это имя используется во внешней локальной области для определения локального или параметра

Мой вопрос: почему я не могу объявить новую переменную внутри моегометод, кажется, я должен объявить свою переменную вне метода, а затем присвоить значение внутри метода.

Если я только что вышел, это означает, что я должен передать переменную int в свой метод, не могу ли я создать внутриметод?И из указателя параметра, который я объявляю внутри моего метода?

Ответы [ 4 ]

0 голосов
/ 24 августа 2018
  1. В принципе, вы не правильно объявили.
  2. тогда в вашей функции (line3), так как n уже объявлено, вы не можете объявить его снова как int.
  3. ваша функция всегда будет возвращать 46, потому что вы переназначаете ее в строке 3 на 46
  4. ваша функция вернет 46, но установит n на 47, я не уверен, что это то, что вам нужно.

Если вы хотите просто увеличить на 1, вы можете запустить этот код где угодно:

n++; // increment n by 1

n += 46; // increment n by 46

Если вам действительно нужна функция, я сомневаюсь, что вам нужны оба, out int n и return 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; }

Надеюсь, это поможет понять, что они делают.

0 голосов
/ 24 августа 2018

Вы можете написать свой метод, как это.Он вернет идеальный вывод.

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

Это вернет 47 в качестве вывода.

0 голосов
/ 24 августа 2018

Не уверен, что вы пытаетесь сделать, но это не так, как это работает. Посмотрите на пример (это не самый простой способ увеличить число, это просто POC того, как работают параметры ref и out).

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

0 голосов
/ 24 августа 2018

Объявление out объявляет переменную, вам просто нужно установить в методе:

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

Обратите внимание, что этот метод возвращает 46, но n47.

...