передача "неизвестного перечисления" методу - PullRequest
1 голос
/ 20 мая 2010

В настоящее время я пытаюсь создать класс, который может регистрировать строки как идентификаторы и связывать их с различными типами перечислений, эти перечисления оцениваются только настолько, что я гарантирую, что при их использовании параметр передается в broadcast (messageType) является экземпляром ассоциированного типа Enum.

Это будет работать примерно так:

Diagnostics.RegisterIdentifier("logger", typeof(TestEnum));
Diagnostics.Broadcast("logger", TestEnum.Info, null, "Hello World", null);

вот код, который у меня сейчас есть, мне нужно убедиться, что messageTypesEnum содержится в messageTypesFromIdentifier.

private static Dictionary<string, Type> identifierMessageTypeMapping = new Dictionary<string, Type>();
    private static List<IListener> listeners = new List<IListener>();

    public static void RegisterIdentifier(string identifier, Type messageTypesEnum)
    {
        if (messageTypesEnum.BaseType.FullName == "System.Enum")
        {
            identifierMessageTypeMapping.Add(identifier, messageTypesEnum);
        }
        else
        {
            throw new ArgumentException("Expected type of messageTypesEnum to derive from System.Enum", "messageTypesEnum");
        }
    }



    public static void Broadcast(string identifier, object messageType, string metaIdentifier, string message, Exception exception)
    {
        if (identifierMessageTypeMapping.ContainsKey(identifier))
        {
            Type messageTypesFromIdentifier = identifierMessageTypeMapping[identifier];
            foreach (var listener in listeners)
            {
                DiagnosticsEvent writableEvent = new DiagnosticsEvent(identifier, messageType, metaIdentifier, message, exception);
                listener.Write(writableEvent);
            }
        }
    }

1 Ответ

1 голос
/ 20 мая 2010

Похоже, что Generics может быть полезным для того, что вы пытаетесь сделать. Тогда вы можете объединить вызовы в нечто вроде

Diagnostics.Broadcast<TestEnum>("logger", TestEnum.Info, null, "Hello World", null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...