2010-05-20 122 views
1

我目前正在嘗試創建一個類,該類可以將字符串註冊爲標識符,並將它們與不同類型的枚舉進行關聯,這些枚舉僅在評估時才進行評估,以確保當它被使用時,傳遞給廣播的參數(messageType)是關聯的枚舉類型的一個實例。將「未知枚舉」傳遞給方法

這工作是這樣的:

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

看起來泛型可能對你正在嘗試做的事很有用。然後你可以把這些電話合併成類似的東西

Diagnostics.Broadcast<TestEnum>("logger", TestEnum.Info, null, "Hello World", null); 
+0

如果需要,你可以進一步使用'MethodInfo.MakeGenericMethod'等動態調用泛型方法。 – JoeGeeky 2010-05-20 19:06:11