“select”키워드와 확장 메소드를 사용 IEnumerable<T>
하여 LINQ를 사용하여을 리턴 했지만 일반을 리턴해야하며 Dictionary<T1, T2>
이를 파악할 수 없습니다. 내가 배운 예는 다음과 비슷한 형태로 무언가를 사용했습니다.
IEnumerable<T> coll = from x in y
select new SomeClass{ prop1 = value1, prop2 = value2 };
확장 방법으로도 같은 작업을 수행했습니다. 위의 예제에서 “SomeClass”를 “”로 바꿀 Dictionary<T1, T2>
수 있기 때문에의 항목을 반복 할 수 있다고 가정 했지만 작동하지 않습니다 (Key 및 Value는 읽기 전용으로 표시되어 있으므로이 코드를 컴파일 할 수 없습니다) ).KeyValuePair<T1, T2>
new KeyValuePair<T1, T2> { ...
이것이 가능합니까, 아니면 여러 단계로 수행해야합니까?
감사.
답변
확장 메소드는 ToDictionary 확장 도 제공합니다 . 사용하는 것은 매우 간단하지만 일반적인 사용법은 키에 대한 람다 선택기를 전달하고 객체를 값으로 가져 오는 것이지만 키와 값 모두에 대해 람다 선택기를 전달할 수 있습니다.
class SomeObject
{
public int ID { get; set; }
public string Name { get; set; }
}
SomeObject[] objects = new SomeObject[]
{
new SomeObject { ID = 1, Name = "Hello" },
new SomeObject { ID = 2, Name = "World" }
};
Dictionary<int, string> objectDictionary = objects.ToDictionary(o => o.ID, o => o.Name);
그런 다음 objectDictionary[1]
“Hello”값을 포함합니다
답변
var dictionary = (from x in y
select new SomeClass
{
prop1 = value1,
prop2 = value2
}
).ToDictionary(item => item.prop1);
그것이 그것이 사전에 SomeClass.prop1
바람직한 것이라고 가정합니다 Key
.
답변
컬렉션 KeyValuePair
은 훨씬 명시 적이며 매우 잘 실행됩니다.
Dictionary<int, string> dictionary = objects
.Select(x=> new KeyValuePair<int, string>(x.Id, x.Name))
.ToDictionary(x=>x.Key, x=>x.Value);