C# 通过反射检查扩展方法是否可以在特定类型上调用的健壮方法

C# 通过反射检查扩展方法是否可以在特定类型上调用的健壮方法,c#,generics,reflection,extension-methods,C#,Generics,Reflection,Extension Methods,是否有现成的解决方案(通过反射)来检查扩展方法的参数是否与特定的任意类型兼容 如果扩展方法在这个参数上有简单的类型,那么这是一个简单的任务,您可以调用Type.IsAssignableTo(),然后就完成了 但是,如果这个arg是这样的: public static void ExtMethod<T, V, X>(this Dictionary<V, List<string>> arg) where V : IDictionary<List<

是否有现成的解决方案(通过反射)来检查扩展方法的参数是否与特定的任意类型兼容

如果扩展方法在
这个
参数上有简单的类型,那么这是一个简单的任务,您可以调用
Type.IsAssignableTo()
,然后就完成了

但是,如果
这个
arg是这样的:

public static void ExtMethod<T, V, X>(this Dictionary<V, List<string>> arg)
    where V : IDictionary<List<X>, T>, new()
    where T : class, IDisposable
publicstaticvoidextmethod(此字典参数)
其中V:IDictionary,new()
其中T:类,IDisposable
这样的检查可能很难解决。当然,我的例子看起来并不实用,但在这个世界上任何可能的东西,我试图制作的工具都应该能够处理任何荒谬但有效的(从C#的角度)构造

任务上下文

我目前正在用面向.net的IDE类工具开发智能自动完成。类似于VS中的IntelliSense,我需要为用户提供扩展方法,这些方法可以用于当前完成弹出窗口上下文中的类型。但是,如何找到这种类型的所有扩展方法,给我带来了很大的麻烦,因为我甚至看不到构建这种匹配算法的方法


我想知道是否有其他方法可以做到这一点(例如Cecil)?

我不明白:为什么
IsAssignableFrom
不起作用,我认为它可以起作用没有问题?这里有一把小提琴来证明它对我不起作用,因为我没有构造泛型类型实例。但是,我有一个通用形式的所有扩展方法的列表。我的目标是检查,如果显示某个扩展方法是某个特定类型的上下文真的有意义的话。例如,我们有System.Enumerable和大量扩展。还有一些清单。如果我只选择typeof(IEnumerable).IsAssignableFrom(List),它将返回false,因为T!=一串但是,它实际上是兼容的,因为它匹配了所有类型约束和其他类似的东西。Finlay解决了这个问题,来自Lazlo的答案让我非常高兴,因为它只工作,只需要很少的修改。