Як повернути літерал масиву в 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.