Подтвердить что ты не робот

Динамический синтаксис в С#

В последнее время я сталкивался с примерами на С#, которые используют синтаксис, который выглядит следующим образом:

var result = new { prop1 = "hello", prop2 = "world", prop3 = "." };

Мне это очень нравится. Похоже на JSON. Однако я не знаю, как называется этот синтаксис. По этой причине я не уверен, как узнать больше об этом. Я действительно заинтересован в том, чтобы выяснить, как определить массивы объектов в результате. Например, что, если я хочу вернуть массив элементов для prop3? Как это будет выглядеть? Что называется этим синтаксисом?

4b9b3361

Ответ 1

В С# это называется Анонимные типы.

Чтобы вернуть массив, вы можете просто вставить его:

var result = new { prop1 = "hello", prop2 = "world", prop3 = new int[] {1,2,3} };

Или объявите его заранее и используйте его:

int[] array = new int[] {1,2,3};
var result = new { prop1 = "hello", prop2 = "world", prop3 = array};

Ответ 2

он назвал анонимные типы. Для возврата массива объектов в prop3 вы должны написать

var result = new { prop1 = "hello", prop2 = "world", prop3 = new[] { "h", "e", "l", "l", "o" } };

Я использую строки, но одинаковы для любого типа объекта:

var result = new { prop1 = "hello", prop2 = "world", prop3 = new[] { new YourType(), new YourType(), new YourType() } };

Обратите внимание, что тип объектов в массиве не требуется в объявлении массива; вам не нужно писать new YourType[], компилятор ему не нужен, а IMO - чище, просто используйте new[]

Ответ 3

Несколько новых возможностей здесь:

Вы можете объединить эти функции, чтобы сформировать анонимный тип . Поскольку вам не нужно объявлять или конструировать тип во время компиляции, вы можете объявить этот объект, и компилятор сделает соответствующий тип и построит его для вас в IL.

Ответ 5

Следующий код является примером анонимного типа с использованием инициализатора объекта

var result = new { prop1 = "hello", prop2 = "world", prop3 = "." };

для получения дополнительной информации см. Анонимные типы (Руководство по программированию на С#) и Объект и Инициализаторы коллекции (Руководство по программированию на С#)