将“未知枚举”传递给方法

时间:2010-05-20 18:48:18

标签: c# .net enums

我目前正在尝试创建一个可以将字符串注册为标识符的类,并将它们与不同类型的枚举相关联,这些枚举的评估仅限于我确保在使用它时,参数传递给broadcast(messageType)是关联的枚举类型的实例。

这可以是这样的:

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

这是我目前的代码,我需要能够验证messageTypesFromIdentifier中是否包含messageTypesEnum。

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 个答案:

答案 0 :(得分:1)

看起来Generics可能对您正在尝试的内容有用。然后你可以将调用组合成类似

的东西
Diagnostics.Broadcast<TestEnum>("logger", TestEnum.Info, null, "Hello World", null);