Общий список анонимного класса

Обратите внимание, что в приведенном выше примере установка переменных при приеме, например:

msg.msg_name = NULL;
msg.msg_namelen = 0;

iov[0].iov_base = ptr;
iov[0].iov_len = nbytes;
msg.msg_iov = iov;
msg.msg_iovlen = 1;

, не требуется. Вся идея структуры сообщений с заголовками заключается в том, что принимающий сайт не должен знать, что он читает, и может, проверив заголовок (первый), какое сообщение оно и что ожидать.

385
задан leppie 6 September 2013 в 20:39
поделиться

7 ответов

Вы могли сделать:

var list = new[] { o, o1 }.ToList();

существует много способов освежевать эту кошку, но в основном они будут все использовать вывод типа где-нибудь - что означает, что необходимо называть общий метод (возможно как дополнительный метод). Другой пример мог бы быть:

public static List<T> CreateList<T>(params T[] elements)
{
     return new List<T>(elements);
}

var list = CreateList(o, o1);

Вы получаете идею:)

406
ответ дан Jon Skeet 7 September 2013 в 07:39
поделиться

Не точно, но можно сказать List<object>, и вещи будут работать. Однако list[0].Id не будет работать.

Это будет работать во времени выполнения в C# 4.0 при наличии List<dynamic>, который является Вами, не получит IntelliSense.

44
ответ дан Micha Wiedenmann 7 September 2013 в 07:39
поделиться
  • 1
    Как Вы разграничиваете? Я имею в виду, что Вы рассматриваете вопрос убывающей доходности? – R. Martinho Fernandes 6 April 2010 в 07:14

Можно сделать это этот путь:

var o = new { Id = 1, Name = "Foo" };
var o1 = new { Id = 2, Name = "Bar" };

var array = new[] { o, o1 };
var list = array.ToList();

list.Add(new { Id = 3, Name = "Yeah" });

Это кажется небольшим "hacky" мне, но это работает - если Вы действительно должны иметь список и не можете только использовать анонимный массив.

3
ответ дан Jon Skeet 7 September 2013 в 07:39
поделиться
  • 1
    Заботьтесь с черным списком. Вы won' t быть в состоянии преобразовать некоторые шрифты. – Spacemonkey 13 June 2013 в 16:40

Я предполагаю

List<T> CreateEmptyGenericList<T>(T example) {
    return new List<T>();
}

void something() {
    var o = new { Id = 1, Name = "foo" };
    var emptyListOfAnonymousType = CreateEmptyGenericList(o);
}

, будет работать.

Вы могли бы также рассмотреть запись его как это:

void something() {
    var String = string.Emtpy;
    var Integer = int.MinValue;
    var emptyListOfAnonymousType = CreateEmptyGenericList(new { Id = Integer, Name = String });
}
23
ответ дан Luis Perez 7 September 2013 в 07:39
поделиться
  • 1
    Можно все еще записать тестовую утилиту API, которая позволяет Вам определить только те вещи, которые Вы хотите отклонить от базовой линии. – Mark Seemann 9 April 2010 в 09:36

Я очень удивлен, что никто не предложил инициализаторы набора. Этот путь может только добавить объекты, когда список создается отсюда имя однако, он походит на самый хороший способ сделать его. Никакая потребность создать массив затем не преобразовывает его в список.

var list = new List<dynamic>() 
{ 
    new { Id = 1, Name = "Foo" }, 
    new { Id = 2, Name = "Bar" } 
};

можно всегда использовать object вместо dynamic, но пытающийся сохранить это истинным универсальным способом затем dynamic имеет больше смысла.

1
ответ дан 22 November 2019 в 23:42
поделиться

При использовании C# 7 или выше можно использовать типы "кортеж" вместо анонимных типов.

var myList = new List<(int IntProp, string StrProp)>();
myList.Add((IntProp: 123, StrProp: "XYZ"));
0
ответ дан 22 November 2019 в 23:42
поделиться

Вот ответ.

string result = String.Empty;

var list = new[]
{ 
    new { Number = 10, Name = "Smith" },
    new { Number = 10, Name = "John" } 
}.ToList();

foreach (var item in list)
{
    result += String.Format("Name={0}, Number={1}\n", item.Name, item.Number);
}

MessageBox.Show(result);
101
ответ дан 22 November 2019 в 23:42
поделиться
Другие вопросы по тегам:

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