코드에는 IResourceConverter를 구현하는 하나의 유형 만 있습니다. 다음 두 linq 문을 찾고 있습니다. 전자는 그것을 찾지 못한다. 후자가 않습니다. 그러나 그들은 둘 다 동등한 구문입니다 (또는 적어도 있어야합니다!).linq 퍼즐 ... 동등한 구문 ... 동일한 결과가 아닙니다!
의 LINQ 문 1 :
List<Type> toInstantiate = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(assembly => assembly.GetTypes())
.Where(type => typeof(IResourceConverter).IsAssignableFrom(type)
&& type != typeof(IResourceConverter))
.ToList();
이 0 결과를 반환합니다.
의 LINQ 문 2 : 내가 발발 toInstantiate 1 개 결과가이 경우에는 foreach 루프
List<Type> toInstantiate = new List<Type>();
List<Type> allTypes = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(assembly => assembly.GetTypes())
.ToList();
foreach (Type t in allTypes)
{
if (typeof(IResourceConverter).IsAssignableFrom(t)
&& t != typeof(IResourceConverter))
toInstantiate.Add(t);
}
와 동등했던 where 절을 제외하고 그대로 LINQ를 떠난
... 정확히 내가 기대했던 것.
이상한 행동에 대한 설명이 있습니까?
toInstantiate에서 1 개의 결과가 실제로 IResourceConverter를 구현한다고 가정합니다. 문맥이 애매한 순간에 몇 가지 사실을 추가/명확히하고 싶을 수도 있습니다. – jrista
죄송합니다, jrista. 네, IResourceConverter를 구현하는 하나의 유형이 있습니다. Linq 문이 찾고있는 것입니다. 전자는 그것을 찾지 못한다. 후자가 않습니다. 그러나 둘 다 동등한 구문으로 보입니다. – Daniel
나는 아직도 linq을 사용하지만, 그 위치를 별도로 유지하고 allTypes에서 쿼리하는 경우에도 이런 일이 발생한다는 것을 알아 차렸다. –