C # 3.0에서는 다음 구문을 사용하여 익명 클래스를 만들 수 있습니다.
var o = new { Id = 1, Name = "Foo" };
이 익명 클래스를 일반 목록에 추가하는 방법이 있습니까?
예:
var o = new { Id = 1, Name = "Foo" };
var o1 = new { Id = 2, Name = "Bar" };
List<var> list = new List<var>();
list.Add(o);
list.Add(o1);
또 다른 예:
List<var> list = new List<var>();
while (....)
{
....
list.Add(new {Id = x, Name = y});
....
}
답변
당신은 할 수 있습니다 :
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);
당신은 아이디어를 얻는다 🙂
답변
여기에 답이 있습니다.
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);
답변
이를 수행하는 방법에는 여러 가지가 있지만 여기서 응답 중 일부는 가비지 요소가 포함 된 목록을 작성하므로 목록을 지워야합니다.
제네릭 형식의 빈 목록을 찾으려면 튜플 목록에서 선택을 사용하여 빈 목록을 만듭니다. 어떤 요소도 인스턴스화되지 않습니다.
빈 목록을 만드는 하나의 라이너는 다음과 같습니다.
var emptyList = new List<Tuple<int, string>>()
.Select(t => new { Id = t.Item1, Name = t.Item2 }).ToList();
그런 다음 일반 유형을 사용하여 추가 할 수 있습니다.
emptyList.Add(new { Id = 1, Name = "foo" });
emptyList.Add(new { Id = 2, Name = "bar" });
대안으로, 당신은 빈리스트를 만들기 위해 아래와 같은 것을 할 수 있습니다 (그러나, 나는 채워진 Tuples 컬렉션에도 사용할 수 있기 때문에 첫 번째 예를 선호합니다).
var emptyList = new List<object>()
.Select(t => new { Id = default(int), Name = default(string) }).ToList();
답변
정확히는 아니지만 말할 수 List<object>
있고 작동합니다. 그러나 list[0].Id
작동하지 않습니다.
이것은 C # 4.0 에서 런타임 에 작동 하여List<dynamic>
IntelliSense를 얻지 못합니다.
답변
나는 추측한다
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 = Enumerable.Range(0, 0).Select(e => new { ID = 1, Name = ""}).ToList();
list.Add(new {ID = 753159, Name = "Lamont Cranston"} );
//etc.
최근에 나는 다음과 같이 작성했습니다.
var list = Enumerable.Repeat(new { ID = 1, Name = "" }, 0).ToList();
list.Add(new {ID = 753159, Name = "Lamont Cranston"} );
반복 방법을 사용하면 다음을 수행 할 수 있습니다.
var myObj = new { ID = 1, Name = "John" };
var list = Enumerable.Repeat(myObj, 1).ToList();
list.Add(new { ID = 2, Name = "Liana" });
.. 첫 번째 항목이 이미 추가 된 초기 목록을 제공합니다.
답변
코드에서이 작업을 수행 할 수 있습니다.
var list = new[] { new { Id = 1, Name = "Foo" } }.ToList();
list.Add(new { Id = 2, Name = "Bar" });