サブタイトル: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>