Как вернуть несколько значений из метода?

#c# #return

#c# #Возврат

Вопрос:

Из следующего кода я хочу y вернуть несколько значений, но программа возвращает только последнее.

 public int runDraw()
{
    for (int j = 1; j <= numberofDraws; j  )
    {
        ...
        if (even_count > odd_count)
        {
            Console.WriteLine("The result of {0} draw is Even.", j);
            y = 1;
        }
        else if (even_count < odd_count)
        {
            Console.WriteLine("The result of {0} draw is Odd.", j);
            y = 2;
        }
        else
        {
            Console.WriteLine("The result of {0} draw is Draw.", j);
            y = 3;
        }
    }
    return y;
}
  

Комментарии:

1. Какой тип объекта вы хотите, чтобы возвращал метод?

2. y одновременно может содержать только одно значение. Тот факт, что вы повторно устанавливаете его в цикле, ничего не меняет, и это происходит только return после выполнения всего цикла

3. Вы можете использовать метод iterator.

Ответ №1:

Одним из вариантов было бы вернуть перечисление int, поскольку один int не может представлять несколько значений напрямую. Вот пример использования yield return , который затруднит переход к следующему значению, только если вы когда-нибудь попросите об этом.

     public IEnumerable<int> runDraw()
    {
        for (int j = 1; j <= numberofDraws; j  )
        {
        ...
            if (even_count > odd_count)
            {
                Console.WriteLine("The result of {0} draw is Even.", j);
                yield return 1;
            }
            else if (even_count < odd_count)
            {
                Console.WriteLine("The result of {0} draw is Odd.", j);
                yield return 2;
            }
            else
            {
                Console.WriteLine("The result of {0} draw is Draw.", j);
                yield return 3;
            }
        }
        yield return y;
        // What you do here really depends on your unshared logic
        // You might return 0 or throw an exception if this is invalid
    }
  

Затем вы можете обращаться к значениям итеративно, например, с помощью foreach цикла:

 foreach (int j in runDraw())
{
    Console.WriteLine(j);
}
  

Ответ №2:

вы можете достичь этого с помощью массива или коллекции.

  1. Использование массива

      int[] result = new int[numberofDraws];
     result[j] = your result (1,2,3 based on condition)
     return result;
      
  2. Использование списка

      List<int> result = new List<int>();
     result.Add(1);
     return resu<
      

Примечание: измените возвращаемый тип в соответствии с использованием, если вы собираетесь использовать массив int[] , если вы собираетесь использовать список List<int> .

Ответ №3:

Вы можете использовать out параметры или кортежи для возврата нескольких значений из любой функции, проверьте их наличие.