Я возвращаю тип 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 слишком долго?:)
По сути, вы хотите создать пустой массив. C # может определить тип массива из аргументов, но для пустых массивов вам все равно нужно указать тип. Я думаю, ваш оригинальный способ сделать это достаточно хорош. Или вы можете сделать это:
return Json(
new {
stuff = new ListOfStuff[]{}
}
);
Тип массива на самом деле не имеет значения, поскольку любое пустое перечисляемое будет преобразовано в []
в JSON. Думаю, для удобства чтения укажите тип пустого массива. Таким образом, когда другие читают ваш код, становится более очевидным, каким должен быть этот член.
Думаю, вы здесь говорите о C #. Мои знания о C # ограничены, но я не думаю, что вы можете создать новый объект без типа. Почему вы не можете вернуть общий новый List []? (здесь может быть смешивание универсальных типов Java, я не уверен, что можно вернуть список универсальных типов на C #).
отправить общий тип?:
List<Object>()
или отправить пустой массив объектов: новый объект [0]
Возможно, вам все равно, какой это список, но для вызывающего абонента это имеет значение. C # обычно не пытается вывести типы на основе переменной, в которой он хранится (так же, как вы не можете создавать перегрузки методов для возвращаемого типа), поэтому необходимо указать тип. Тем не менее, вы можете использовать new ListOfStuff [0]
, если хотите вернуть пустой массив. Это имеет эффект неизменности (по длине) для вызывающей стороны (они получат исключение, если попытаются вызвать методы, изменяющие длину IList
.)
Вы можете использовать Enumerable.Empty
, чтобы быть более явным:
return Json(
new {
stuff = Enumerable.Empty<ListOfStuff>()
}
);
Хотя он не короче и не избавляется от аргумента типа.