【发布时间】:2015-05-30 12:08:20
【问题描述】:
代码:
using System.IO;
using System;
using System.Reflection;
using System.Collections.Generic;
class AnyClass
{
delegate void Del(string str);
static void Main()
{
List<Del> listDel = new List<Del>();
listDel.Add(delegate(string str) { });
Console.WriteLine( listDel[0].Method.ToString() );
listDel.Add(delegate(string str) { });
Console.WriteLine( listDel[1].Method.ToString() );
for (int i = 0; i < 2; i++)
{
listDel.Add(delegate(string str) { });
}
Console.WriteLine( listDel[2].Method.ToString() );
Console.WriteLine( listDel[3].Method.ToString() );
}
}
输出:
Void m__0(System.String)
无效 m__1(System.String)
无效 m__2(System.String)
void m__2(System.String)
为什么在循环中实例化的委托“指向”同一个方法(m__2),而在循环外实例化的委托指向两个不同的方法(m__0 和m__1)?
有什么方法可以实例化指向不同/唯一方法循环内的委托?
使用示例:我需要将委托作为字典中的键,因此它们必须是唯一的。循环内的实例化对于提供足够的灵活性是必要的。
【问题讨论】:
-
嗯,这应该报告给 Roslyn 团队进行审查。我看不出为什么不应该有一个 single 方法和委托。
-
@usr 我不确定他是否在 Roslyn 上运行。
-
@usr Roslyn 没有cache it either
标签: c# reflection delegates anonymous-function