问题天天有,今天特别多,这是一个更加奇葩的问题,
话说,对于反射的方法,到是可以用 表达式树,对其缓存,以缓解性能问题,
不知道,自己定义枚举器这样的“类”能不?
之所以这样想,是因为可以,通过下面方法调用并得到解析
Activator.CreateInstance(typeof(MyEnumerator<>).MakeGenericType........)
internal class MyEnumerator<T> : IEnumerator<T>
今天,遇到一个问题,如果能把一个 自己枚举器,缓存,就 牛X 了,不过,以我的脑容量及智力余额,当时就疯了,到现在,也没有想通这货是能还是不能,仍就疯言疯语中......
如果能,愿闻其详啊~
可以。表达式树其实就是我们代码的另一种表现形式,只是这个表现形式有点复杂而已。
如果要代码,你可以把你的反射代码贴出来,找时间帮你翻译成表达式。
代码其实没有什么, 实现 IEnumerator<> 接口后,添加一个有参的构造函数。
class Program { static void Main(string[] args) { Type elementType = null; object result = Activator.CreateInstance(typeof(MyEnumerator<>).MakeGenericType(elementType), BindingFlags.Instance | BindingFlags.NonPublic, null, new object[] { "Ctor parameter" }, null); } internal class MyEnumerator<T> : IEnumerator<T> { internal MyEnumerator(string parameter) { } public string Current { get { throw new NotImplementedException(); } } public void Dispose() { throw new NotImplementedException(); } object System.Collections.IEnumerator.Current { get { throw new NotImplementedException(); } } public bool MoveNext() { throw new NotImplementedException(); } public void Reset() { throw new NotImplementedException(); } } }
我这个描述,有点问题,我只是觉得每次调用都 MakeGenericType 我想应该是比较耗时的,能不能像缓存泛型方法一样,指定方法(这个是类了),加上泛型类型,在缓存中找中缓存的方法(这个是枚举器)直接执行获得结果,而不用再次 Make 了。
表达的有点乱.....
@Srouni: 那你这个就不需要使用表达式来表示了。
1、你确认Make很耗时?我认为应该不是很耗时的,这个你可以确认下。
2、按照你的需求,缓存范类型,可以使用字典来实现,这样的性能很高。
@519740105:
这个问题,确实有点无聊啊.....