面临有趣的问题。当我尝试调用使用 TypeDelegator 参数构造的泛型方法时,C# 运行时抛出“不支持”异常。这是示例:
using System;
using System.Reflection;
using System.Linq.Expressions;
namespace ConsoleApplication2
{
public class Arg { }
public class MyTypeDelegator : TypeDelegator
{
protected override bool HasElementTypeImpl() { return false; }
}
public static class Extension
{
public static int Method<T>(this Arg arg) { return 0; }
}
class Program
{
static void Main(string[] args)
{
var methodInfo = typeof(Extension).GetMethod("Method").MakeGenericMethod(new MyTypeDelegator());
// System.NotSupportedException here:
methodInfo.Invoke(new Arg(), new Object[] { });
// and here:
var call = Expression.Call(methodInfo, new Expression[] {Expression.Constant(new Arg(), typeof(Arg)) });
}
}
}
什么是解决方法或解决方案?
PS:我不能删除 MyTypeDelegator,因为它作为动态软类的类型别名,来自 3rd 方库。真正泛型 Method 的签名和实现取决于 MyTypeDelegator 中存储的具体数据。