Как вернуть литерал массива в C #


87

Я пробую следующий код. Указывается строка с ошибкой.

int[] myfunction()
{
    {
      //regular code
    }
    catch (Exception ex)
    {                    
       return {0,0,0}; //gives error
    }
}

Как я могу вернуть литерал массива, например строковые литералы?


4
Также ничего не стоит то, что C # на самом деле не имеет литералов массива, а имеет синтаксис инициализации массива, на который ссылается принятый ответ. Литералы отличаются тем, что их можно сериализовать напрямую и назначать constполям. Это не относится к синтаксису инициализации массива.
— cwharris

Ответы:


164

Верните такой массив int:

return new int [] { 0, 0, 0 };

Вы также можете неявно ввести массив - компилятор определит, что он должен быть, int[]потому что он содержит только intзначения:

return new [] { 0, 0, 0 };

6
Ого, я не знал, что можно неявно вводить массивы! +1
— Крис Синклер

1
Я обнаружил, что это new int [] {0,0,0}тоже работает. На мой взгляд, было бы яснее.
— sgarg

3
@sgarg Это похоже на ответ. И я не согласен, неявная типизация массива означает, что изменение констант на числа с плавающей запятой автоматически приведет к правильному типу массива.
— NetMage

12

Blorgbeard прав, но вы также можете подумать об использовании нового для .NET 4.0 класса Tuple. Я обнаружил, что легче работать, когда у вас есть определенное количество предметов, которые нужно вернуть. Как если бы вам всегда нужно возвращать 3 элемента в вашем массиве, кортеж из 3-х int дает понять, что это такое.

return new Tuple<int,int,int>(0,0,0);

или просто

return Tuple.Create(0,0,0);

2
Если у вас есть переменное количество элементов, но вам нужна дополнительная функциональность, вы также можете:return new List<int>(new int[]{0,0,0});
— Дэйв

1
@ Дэйв не List<int>(Enumerable.Repeat(0, 3))лучше?
— NetMage

@NetMage Было бы лучше, если бы вы, конечно, хотели варьировать количество элементов.
— Дэйв

9

если массив имеет фиксированный размер и вы хотите вернуть новый, заполненный нулями

return new int[3];
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.