【发布时间】:2019-02-22 14:56:23
【问题描述】:
因为 Type.FullName 有点难看,所以我需要制作我漂亮的名称构造函数。但是当我使用Type.GetGenericArguments() 时,我遇到了一个问题。
外部类C1 的通用T 始终分发给嵌套类C2 和C3。
class C1<T> {
public class C2<T1, T2> {
}
public class C3 {
}
}
typeof( C1<> ).ToString(); // C1`1[T]
typeof( C1<>.C2<,> ).ToString(); // C1`1+C2`2[T,T1,T2]
typeof( C1<>.C3 ).ToString(); // C1`1+C3[T]
两个问题:
- 如何判断泛型类型是否来自外部类?
- 这种行为的原因是什么?
【问题讨论】:
-
至于第二个问题 - 对于外部类的每个特定泛型类型,您都有单独的嵌套类实例;例如,如果您在 C3 中声明
static变量,则每种类型的T将是不同的实例;所以你确实有C3参数化T -
IEnumerable<Type> GetLocalGenericArguments(Type t) => !t.IsNested ? t.GetGenericArguments() : t.GetGenericArguments().Skip(t.DeclaringType.GetGenericArguments().Length);.