Инициализировать и вернуть зубчатый массив в одну строку

В настоящее время я делаю это

public int[][] SomeMethod()
{
    if (SomeCondition)
    {
        var result = new int[0][];
        result[0] = new int[0];
        return result;
    }
    // Other code,
}

Теперь я хочу вернуть только пустой зубчатый массив из [0] [0]. Можно ли свести три строки к одной. Я хочу добиться чего-то подобного

public int[][] SomeMethod()
{
    if (SomeCondition)
    {
        return new int[0][0];
    }
    // Other code,
}

Является ли это возможным?


person fhnaseer    schedule 16.01.2014    source источник


Ответы (3)


В общем случае вы можете позволить компилятору считать элементы за вас:

    public int[][] JaggedInts()
    {
        return new int[][] { new[] { 1, 2, 3 }, new[] { 4, 5, 6 }, new[] { 7, 8, 9, 10 } };
    }

Или, если вы хотите, чтобы он был очень компактным, используйте тело выражения:

 public int[][] JaggedInts() => new int[][] { new[] { 1, 2, 3 }, new[] { 4, 5, 6 }, new[] { 7, 8, 9, 10 } };

Поскольку вы просили пустой зубчатый массив, он у вас уже был:

var result = new int[0][];

Следующая строка в вашем вопросе вызовет исключение времени выполнения, поскольку [0] является первым элементом в массиве, который должен иметь длину 1 или более элементов;

 result[0] = new int[0];  // thows IndexOutOfRangeException: Index was outside the bounds of the array.

Вот что, я думаю, вы просили всего в одной строке:

public int[][] Empty() => new int[0][];
person Andrew Dennison    schedule 18.11.2017

Пожалуйста, посмотрите здесь https://stackoverflow.com/a/1739058/586754 и ниже.

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

(Также искал 1-строчное решение.)

person Andreas Reiff    schedule 17.10.2014

возвращая значение зубчатого массива, он дает вам неоднозначный результат, если вы хотите вернуть какое-то конкретное значение некоторого конкретного индекса зубчатого массива, который вы можете вернуть, назначив их переменной

 public static int  aaa()
    {

        int[][] a = new int[2][] { new int[] { 1, 2 }, new int[] { 3, 4 } };
        int abbb=a[0][0];
        Console.WriteLine(a[0][0]);
        return abbb;
    }

следующий код вернет 1, потому что это первый элемент зубчатого массива

person Adiii    schedule 19.01.2015