그것은 소리 :
var lookup = assembly.GetTypes().ToLookup(t => t.Namespace);
또는 대안 (매우 유사하게) 당신이 사용할 수 GroupBy
: 예를 들어
var groups = assembly.GetTypes().GroupBy(t => t.Namespace);
:
var groups = assembly.GetTypes()
.Where(t => t.IsClass) // Only include classes
.GroupBy(t => t.Namespace);
foreach (var group in groups)
{
Console.WriteLine("Namespace: {0}", group.Key);
foreach (var type in group)
{
Console.WriteLine(" {0}", t.Name);
}
}
그러나 그게 당신이 겪은 일이 아닐지는 확실하지 않습니다. 각 네임 스페이스의 클래스를 가져올 수는 있지만 실제로 찾고있는 클래스인지는 알 수 없습니다. 마음에 부담
두 지점 :
- 하지 정말 형태의 계층 구조를, 멀리 CLR와 관련된 어떠한 일이
- 네임 스페이스에 대한 재귀 어디에도 없습니다. "기본"네임 스페이스와 같은 것은 없습니다. 에는 C# 언어가에 대한 규칙이 있지만 CLR에 관한 한 "부모"네임 스페이스는 없습니다.
당신이 정말는 "Foo.Bar"에서 "Foo.Bar.Baz"와 "푸"다음과 같이 사용할 수 있습니다에서 가고 싶은 경우
while (true)
{
Console.WriteLine(ns);
int index = ns.LastIndexOf('.');
if (index == -1)
{
break;
}
ns = ns.Substring(0, index);
}
@ 존 소총을 : 감사 너 너무 많이. 특히 .Net에 대한 지식은 훌륭합니다. 나는 너의 학생이되고 싶다. :) – Prakash
@ 존 Skeet : 나는 또한 반사에 대해 더 알고 싶다. 나는 일찌감치 반사를 과소 평가했다. 그래서 나는 이것에 대해 더 알고 싶다. 이 주제에 대한 실험 지식을 얻을 수있는 방법이 있습니까? 나는 하나의 방법을 알고있다. :) 근원이 있으면 저를 건의하십시오. – Prakash
@Prakash : 솔직히 말해서, 반성에 관해서는 정말 좋은 선택입니다. Type 및 MethodInfo와 같은 모든 요소를 살펴보고 유용 할 수있는 위치를 생각해보십시오. –