2016-02-19 111 views
0

我需要管理多少個列表,但不知道這是正確的解決方案。 看起來很難維護...如何管理列表數量一般?

有沒有解決方案可以做到更普遍?

List<myAClass> A 
List<myBClass> B 
List<myCClass> C 
... 

public void init<T>(this T target) 
{ 
    switch(target.GetType().GetGenericArguments()[0].Name) 
    { 
     case "myAClass": 
      'do Z for A' 
      break; 

     case "myBClass": 
      'do Z for B' 
      break; 

     case "myCClass": 
      'do Z for C' 
      break; 
    } 
} 
+1

我投票結束這個問題作爲題外話題,因爲它是要求代碼審查。嘗試codereview.stackexchange.com。 –

+0

@ DanielA.White謝謝您的意見。已編輯 –

+1

您的代碼不是通用的 - 您對不同類型有不同的實現,所以重載將是一個更合適的解決方案,但是如果不明白爲什麼'init'是通用的,那麼正確的答案是不可能的。 –

回答

0

通常在這些情況下,我嘗試創建一個地圖(又名Dictionary)。有點像這樣:

Dictionary<Type, Action<object>> myMap = new Dictionary<Type, Action<object>> 
    { 
     {typeof(myAClass), list =>{ /* YOUR METHOD/LAMBDA/ETC HERE */ }}, 
     {typeof(myBClass), list =>{ /* YOUR METHOD/LAMBDA/ETC HERE */ }}, 
     {typeof(myCClass), list =>{ /* YOUR METHOD/LAMBDA/ETC HERE */ }}, 
    }; 

    public void Init<T>(T target) 
    { 
     if (myMap.ContainsKey(typeof (T))) 
     { 
      myMap[typeof (T)](target); 
     } 
    } 

注:我還沒有嘗試編譯此代碼,也有 SA與我如何傳入List<T>作爲一個普通的舊對象(輕微的代碼味道,所以你需要再次將其投回)。在我的辯護中,這是3分鐘的答案... ;-)