サブタイトル:EventHandlerListキーのタイプはオブジェクト以外のものにすることができますか?
EventHandlerに必要なキーを列挙型ストアとして使用したかったのです。
public enum EventKey
{
OnBark, OnCry
}
public EventHandlerList EventList = new EventHandlerList();
public event ComplaintEventHandler OnBark
{
add
{
EventList.AddHandler(EventKey.OnBark, value);
}
remove
{
EventList.RemoveHandler(EventKey.OnBark, value);
}
}
var handler = EventList[eventKey] as ComplaintEventHandler;
>>
handler = null
結局のところ、それは機能しません。ただし、(に示すように)のように宣言されたキーを使用すると機能します。
static object EventKeyOnTap = new object();
いくつかのmscorlibのコードを読んだ後、問題next.key == keyは
private EventHandlerList.ListEntry Find(object key)
{
EventHandlerList.ListEntry next = this.head;
while (next != null && next.key != key)
{
next = next.next;
}
return next;
}
比較された両方のキーは私Enumのものですが、等しくありません!私はそれがobject起こっていることへのいくつかの暗黙のキャストから来ていると思います(リストに格納されているキーはタイプobjectです)が、そのような低レベルの概念には十分に流暢ではありません。
私の推測は正しいですか?
Enumのキーとしてを使用するための最良の方法は何EventHandlerListですか?
今のところ、キータイプとして自分EventHandlerListで作成します。Enum
今のところ、前述の等式比較の代わりに使用するコンストラクターを使用しEventHandlerListて、独自のコンストラクターを作成しました。Func<object, object, bool>