Як повернути літерал масиву в 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
Woah ho, я не знав, що ви можете неявно вводити масиви! +1
Кріс Сінклер

1
Я виявив, що це new int [] {0,0,0}також працює. На мою думку, це було б зрозуміліше.
sgarg

3
@sgarg Це, здається, ідентично відповіді. І я не згоден, неявне введення масиву означає, що зміна констант на плаваючу крапку автоматично отримає правильний тип масиву.
NetMage

12

Blorgbeard правильний, але ви також можете подумати про використання нового для .NET 4.0 класу Tuple. Я виявив, що з ними легше працювати, коли у вас є певна кількість предметів для повернення. Як і в тому випадку, якщо вам завжди потрібно повернути 3 елементи у своєму масиві, кортеж із 3 інтерами дає зрозуміти, що це таке.

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
@Dave не List<int>(Enumerable.Repeat(0, 3))було б краще?
NetMage

@NetMage Було б краще, якби ти хотів змінити кількість предметів, звичайно.
Дейв

9

якщо масив має фіксований розмір, і ви хочете повернути новий, заповнений нулями

return new int[3];
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.