确定类是否在T4模板中实现通用列表

时间:2010-06-09 11:46:01

标签: c# templates t4 fxcop

我正在编写一个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中,但仍然无法弄明白。有没有人有关于如何做到这一点的任何线索?

2 个答案:

答案 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")
希望它对某人有帮助!