Помогите с инкрементными интергерсами при зацикливании в C # - PullRequest
0 голосов
/ 10 августа 2011

Я объявил int, например, int i;

У меня есть циклический метод:

 public static void NumberUp(int i)
    {
        i++;
        System.Console.WriteLine(i);
...
}

, хотя каждый раз, когда число возвращается, оно всегда равно 1. Не 1, 2,3 и так далее ..

Я бы предположил, что "i" увеличивается на единицу при каждом запуске метода?

Ответы [ 6 ]

2 голосов
/ 10 августа 2011

Вы можете передать переменную по ссылке .

public static void NumberUp(ref int i)
{
   i++;
   System.Console.WriteLine(i);
   ...
}

Это, однако, плохой дизайн, так как теперь у вас есть метод с побочным эффектом переданного параметра (который не указано в имени метода), что может застать других программистов врасплох.

Лучше было бы вернуть увеличенное значение:

public static int NumberUp(ref int i)
{
   return i + 1;
}
1 голос
/ 10 августа 2011

Было бы лучше определить NumberUp следующим образом

public static int NumberUp(int number)
{
    System.Console.WriteLine(++number);
    return number;
}

Затем назначить возвращаемое значение в вашем цикле.

1 голос
/ 10 августа 2011

Это происходит потому, что вы передаете это по значению.Это означает, что переменная в является функцией копии оригинала.

Если вы хотите, чтобы изменения отражались обратно в переменную оригинал ,вам нужно передать его по ссылке, то есть переменная ссылается на оригинал, а не на копию.Вы можете использовать что-то вроде:

public static void NumberUp (ref int i) {
    i++;
    System.Console.WriteLine(i);
}
0 голосов
/ 10 августа 2011

Метод является статическим, но это не означает, что параметр автоматически.Возможно, используйте статический int в своем классе в качестве члена.

class x
{ static int i;

Или передайте его по REF

0 голосов
/ 10 августа 2011

Это ссылка на тип значения . Чтобы выполнить то, что вам действительно нужно, вы должны передать i по ссылке .

0 голосов
/ 10 августа 2011

int - это тип значения, а не ссылочный тип. Таким образом, i внутри NumberUp является копией переданного вами параметра. Если вы хотите, чтобы значение было изменено вне метода, передайте параметр как ссылку:

public static void NumberUp(ref int i)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...