我有一个扩展功能......
public static class EventLibrary
{
[EventCollection]
public static Event Sequence(this Event ev)
{
ev.Started += (args) =>
{
// do something!
}
}
}
然后,在Event中,我使用以下内容查看委托订阅者...
var dels = new List<Delegate[]>();
if (Started != null)
dels.Add(Started.GetInvocationList());
原因是尝试检测创建闭包的函数是否具有属性,如本例中的EventCollection
。在Delegate对象上,DelcaringType
和ReflectedType
都返回EventLibrary+<Sequence>c_AnonStorey1
之类的内容,但这是我得到的。
我很乐意在没有任何字符串操作的情况下这样做,但我不确定它是否可能......有人知道吗?
答案 0 :(得分:0)
我相信没有办法可靠地做到这一点。您最接近的是获取DeclaringType
,但没有DeclaringMethod
之类的内容。
您似乎已经注意到您可以尝试使用lambda方法的名称,但这样做会很脆弱(方法重载怎么办?)并且在其他语言(如VB.NET)或未来版本中可能无法正常工作编译器。
我认为最好的方法是以某种方式配置Event
来告诉它你想要什么。可能是这样的:
var eventCollectionEvent = ev.EventCollection;
eventCollectionEvent.Started += …;