Довольно часто приходится работать со словарями, делаю обычно таким образом:
private registeredEvents : IDictionary [ Type, System.Collections.Generic.ICollection [ PresentationEvent ] ];
public Register ( name : string, eventDirection : EventDirection, handlerType : Type, ownerType : Type ) : PresentationEvent
{
def newEvent = PresentationEvent ( name, ownerType, eventDirection, handlerType );
mutable existingEvents : System.Collections.Generic.ICollection [ PresentationEvent ] = null;
when ( ! registeredEvents.TryGetValue ( ownerType, out existingEvents ) )
{
existingEvents = List ( );
registeredEvents [ ownerType ] = existingEvents;
}
existingEvents.Add ( newEvent );
newEvent;
}
Вопрос в следующем, можно ли как-то упростить код функции Register таким образом, чтоб избавиться от изменяемой переменной и ветвления when, есть ли какой-то общепринятый красивый паттерн для таких случаев?