我正在编写一个T4模板,它从程序集中加载一些类,对类进行一些分析,然后生成一些代码。我需要做的一个特殊分析是确定该类是否实现了通用列表。我只能在C#中做到这一点,例如
public class Foo : List<string> { }
var t = typeof(Foo);
if (t.BaseType != null && t.BaseType.IsGenericType && t.BaseType.GetGenericTypeDefinition() == typeof(List<>)))
Console.WriteLine("Win");
但是,T4模板使用FXCop内省引擎,因此您无权访问.net反射API。我花了几个小时在Reflector中,但仍然无法弄明白。有没有人有关于如何做到这一点的任何线索?
答案 0 :(得分:0)
我从http://www.binarycoder.net/fxcop/下载了Introspector(正如我在评论中提到的那样),看起来你需要检查BaseType或BaseClass Template。
答案 1 :(得分:0)
想出来,它不是很漂亮但使用AssemblyNode.Load加载的所有类型都是TypeNode类型,以确定类型是否实现List你必须这样做:
node.BaseType.IsGeneric && node.BaseType.Template == FrameworkAssemblies.Mscorlib.Types.SingleOrDefault(t => t.FullName == "System.Collections.Generic.List`1")
希望它对某人有帮助!