Assmbly.GetTpes() 어셈블리의 형식을 가져옵니다. 그러나 중첩 클래스 (OrderLine)도 원한다면 어떻게해야합니까? 클래스 이름이 아닌 어셈블리 이름 만 알고 있으므로 GetType (Order + OrderLine)이 작동하지 않습니다.중첩 클래스의 Assembly.GetTypes()
public class Order
{
public class OrderLine
{
}
}
Assmbly.GetTpes() 어셈블리의 형식을 가져옵니다. 그러나 중첩 클래스 (OrderLine)도 원한다면 어떻게해야합니까? 클래스 이름이 아닌 어셈블리 이름 만 알고 있으므로 GetType (Order + OrderLine)이 작동하지 않습니다.중첩 클래스의 Assembly.GetTypes()
public class Order
{
public class OrderLine
{
}
}
나도 몰라. 가정하지 않으면 다음과 같은 메서드를 사용하여 모든 어셈블리 유형을 반복 할 수 있습니다.
IEnumerable<Type> AllTypes(Assembly assembly)
{
foreach (Type type in assembly.GetTypes())
{
yield return type;
foreach (Type nestedType in type.GetNestedTypes())
{
yield return nestedType;
}
}
}
편집 :
Assembly.GetTypes
반환되는 배열은 중첩 된 유형이 포함 말할 수 있습니다.
정말 위의 대답은 필요하지 않습니다. Assembly.GetTypes
에 의해 Order
및 Order+OrderLine
이 유형으로 반환되어야합니다.
중첩 된 유형에서 중첩 된 유형을 선택하지 않습니다. 그러나 정말로, 누가 그것을합니까? –
@Stefan - 중첩 된 중첩 된 중첩 형식을 검색하는 것은 독자에게 남겨진 재귀의 연습입니다 – Greg
LINQ 문을 사용할 수 있습니다. 나는 당신이 뭘하려고하는지 100 % 확신하지는 못했지만 이런 식으로 할 수 있습니다. 일반 Assembly.GetTypes()
이 중첩 클래스를 반환하지 않을 경우 편집
Assembly.GetTypes().Where(type => type.IsSubclassOf(SomeType) && type.Whatever);
, 당신은 배열을 반복하고 배열에 에서 찾을 모든 것을 추가 할 수 있습니다. 같은 이런
var allTypes = new List<Type>();
var types = Assembly.GetTypes();
allTypes.AddRange(types);
foreach(var type in types)
{
allTypes.AddRange(type.GetNestedTypes());
}
중첩 클래스는 반드시 하위 클래스 일 필요는 없으며 서브 클래스는 중첩되지 않아도됩니다. 이것은 구두꾼이 원하는 것을하지 않습니다. – Greg
@Greg 나는 LINQ 문을 예로 보여주었습니다. –
뭔가 : assembly.GetTypes()
중첩 클래스를 포함하도록되어있는 경우
Assembly.GetTypes().SelectMany(t => new [] { t }.Concat(t.GetNestedTypes()));
Ooh, SelectMany. * 정보를 흡수하기 위해 MSDN으로 이동합니다. * –
궁금한 점은'assembly.GetTypes()'에서 중첩 된 타입을 찾았습니까, 아니면'type.GetNestedTypes()'만 호출하여 찾을 수 있었습니까? – Greg