Существует ли способ указать анонимный пустой перечислимый тип?

Я возвращаю тип Json'ed анонимного:

IList<MyClass> listOfStuff = GetListOfStuff();

return Json(
   new {
       stuff = listOfStuff
   }
);

В определенных случаях я знаю это listOfStuff будет пусто. Таким образом, я не хочу издержки вызова GetListOfStuff() (который выполняет вызов базы данных).

Так в этом случае я пишу:

return Json(
   new {
       stuff = new List<ListOfStuff>()
   }
);

который кажется немного излишне подробным. Я не забочусь какой List это, потому что это пусто так или иначе.

Существует ли стенография, которая может использоваться для выражения пустой счетный/перечислять/массив? Что-то как:

return Json(
   new {
       stuff = new []
   }
);

Или я программировал JavaScript слишком долго?:)

7
задан fearofawhackplanet 2 August 2010 в 22:27
поделиться

5 ответов

По сути, вы хотите создать пустой массив. C # может определить тип массива из аргументов, но для пустых массивов вам все равно нужно указать тип. Я думаю, ваш оригинальный способ сделать это достаточно хорош. Или вы можете сделать это:

return Json(
   new {
       stuff = new ListOfStuff[]{}
   }
);

Тип массива на самом деле не имеет значения, поскольку любое пустое перечисляемое будет преобразовано в [] в JSON. Думаю, для удобства чтения укажите тип пустого массива. Таким образом, когда другие читают ваш код, становится более очевидным, каким должен быть этот член.

5
ответ дан 7 December 2019 в 07:38
поделиться

Думаю, вы здесь говорите о C #. Мои знания о C # ограничены, но я не думаю, что вы можете создать новый объект без типа. Почему вы не можете вернуть общий новый List []? (здесь может быть смешивание универсальных типов Java, я не уверен, что можно вернуть список универсальных типов на C #).

-4
ответ дан 7 December 2019 в 07:38
поделиться

отправить общий тип?:

List<Object>()

или отправить пустой массив объектов: новый объект [0]

1
ответ дан 7 December 2019 в 07:38
поделиться

Возможно, вам все равно, какой это список, но для вызывающего абонента это имеет значение. C # обычно не пытается вывести типы на основе переменной, в которой он хранится (так же, как вы не можете создавать перегрузки методов для возвращаемого типа), поэтому необходимо указать тип. Тем не менее, вы можете использовать new ListOfStuff [0] , если хотите вернуть пустой массив. Это имеет эффект неизменности (по длине) для вызывающей стороны (они получат исключение, если попытаются вызвать методы, изменяющие длину IList .)

2
ответ дан 7 December 2019 в 07:38
поделиться

Вы можете использовать Enumerable.Empty , чтобы быть более явным:

return Json(
    new {
        stuff = Enumerable.Empty<ListOfStuff>()
    }
);

Хотя он не короче и не избавляется от аргумента типа.

2
ответ дан 7 December 2019 в 07:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: