首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeBuilder上的TypeBuilder.GetMethod

TypeBuilder上的TypeBuilder.GetMethod
EN

Stack Overflow用户
提问于 2011-01-20 02:32:11
回答 1查看 661关注 0票数 1

TypeBuilder.GetMethod允许您获取由TypeBuilder关闭的泛型类型上的方法,因此它允许我执行以下操作:

代码语言:javascript
复制
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");

不起作用的(我还不知道如何让它起作用)是这样的:

代码语言:javascript
复制
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)...?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-20 04:07:04

我不完全清楚你想要做什么(看起来你遗漏了一些括号,还有其他问题),但如果你想为EqualityComparer<ICollection<YourType>>.get_Default获得一个MethodInfo,这对我很有效:

代码语言:javascript
复制
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"));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4739183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档