TypeBuilder.GetMethod允许您获取由TypeBuilder关闭的泛型类型上的方法,因此它允许我执行以下操作:
TypeBuilder tb = ....
// this would throw a NotSupportedException :
// var ec = typeof(EqualityComparer<>).
// MakeGenericType(tb).GetMethod("get_Default");
// this works:
var ec = TypeBuilder.GetMethod(tb, typeof(EqualityComparer<>).
GetMethod("get_Default");不起作用的(我还不知道如何让它起作用)是这样的:
Type collectionOf = typeof(ICollection<>).MakeGenericType(tb);
// throws: 'Type must be a type provided by the runtime.
// Parameter name: types'
var colEc = TypeBuilder.GetMethod(collectionOf, typeof(EqualityComparer<>).
GetMethod("get_Default");
// throws NotSupportedException
colEc = typeof(EqualityComparer<>).MakeGenericType(collectionOf).
GetMethod("get_Default");有人知道答案吗(我希望是42)...?
发布于 2011-01-20 04:07:04
我不完全清楚你想要做什么(看起来你遗漏了一些括号,还有其他问题),但如果你想为EqualityComparer<ICollection<YourType>>.get_Default获得一个MethodInfo,这对我很有效:
var ab = AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName("test"),
AssemblyBuilderAccess.Run);
var mb = ab.DefineDynamicModule("test");
var tb = mb.DefineType("TestType");
var ico = typeof(ICollection<>);
var eq = typeof(EqualityComparer<>);
var m = TypeBuilder.GetMethod(eq.MakeGenericType(ico.MakeGenericType(tb)), eq.GetMethod("get_Default"));https://stackoverflow.com/questions/4739183
复制相似问题