2013-03-15 65 views
1

我有2個列表一個存儲可過濾列的名稱(DropDown類型),另一個存儲要在這些可過濾列中加載的值。如何使用變量名來指定具有相同名稱的不同數據類型?

List<string> filterableFields = new List<string>() { "A_B", "C_D", "E_F" }; 
List<string> AB, CD , EF; 

現在在運行時我從網絡服務的數據,我已經寫了一個函數來提取這些過濾字段值,並將其存儲到第二列表。

private void prepareListForFilterableColumns(XDocument records) 
{ 
    foreach (var currentField in filterableFields) 
    { 
     var values = (from xml in records.Descendants(z + "row") 
         let val = (string)xml.Attribute("ows_" + currentField.Replace("_", "_x0020_")) 
         where val != "" 
         orderby val 
         select val 
        ).Distinct(); 

     switch (currentField) 
     { 
      case "A_B": AB = values.ToList(); break; 
      case "C_D": CD = values.ToList(); break; 
     } 
    } 
} 

現在我在想,而不是硬編碼swtich case塊分配,如果我可以只使用第一個列表名稱「A_B」和替換「_」從它指向我的第二個列表和分配values.ToList()到它。

我明白,c#是一種靜態語言,所以不知道我們是否可以實現這一點,但如果我可以它會使我的函數通用。

非常感謝您的時間和幫助。

維沙爾

+1

有點相關:http://stackoverflow.com/questions/11118084/is-it-possible-to-get-local-variables-through-reflection – 2013-03-15 14:14:47

回答

2

你可以使用字符串列表,而不是3所列出的字典存儲的值。

Dictionary<string, List<string>> val lists = new Dictionary<string,List<string>>(); 

,使字典等於filterables的鑰匙:「AB」,「CD」,..

然後,而不是AB你會使用valLists["AB"]然後可以參考基於到達清單一個字符串鍵。

另一種選擇是使用反射,但會更慢,不必要的更復雜一點。

相關問題