Обратите внимание, что в приведенном выше примере установка переменных при приеме, например:
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;
, не требуется. Вся идея структуры сообщений с заголовками заключается в том, что принимающий сайт не должен знать, что он читает, и может, проверив заголовок (первый), какое сообщение оно и что ожидать.
Вы могли сделать:
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);
Вы получаете идею:)
Не точно, но можно сказать List<object>
, и вещи будут работать. Однако list[0].Id
не будет работать.
Это будет работать во времени выполнения в C# 4.0 при наличии List<dynamic>
, который является Вами, не получит IntelliSense.
Можно сделать это этот путь:
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" мне, но это работает - если Вы действительно должны иметь список и не можете только использовать анонимный массив.
Я предполагаю
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 });
}
Я очень удивлен, что никто не предложил инициализаторы набора. Этот путь может только добавить объекты, когда список создается отсюда имя однако, он походит на самый хороший способ сделать его. Никакая потребность создать массив затем не преобразовывает его в список.
var list = new List<dynamic>()
{
new { Id = 1, Name = "Foo" },
new { Id = 2, Name = "Bar" }
};
можно всегда использовать object
вместо dynamic
, но пытающийся сохранить это истинным универсальным способом затем dynamic
имеет больше смысла.
При использовании C# 7 или выше можно использовать типы "кортеж" вместо анонимных типов.
var myList = new List<(int IntProp, string StrProp)>();
myList.Add((IntProp: 123, StrProp: "XYZ"));
Вот ответ.
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);