1

我有 2 个列表,一个存储可过滤列的名称(DropDown 类型),另一个存储要加载到这些可过滤列中的值。

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

现在在运行时,我从 Web 服务获取数据,并编写了一个函数来提取这些可过滤字段的值并将值存储到第二个列表。

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# 是一种静态语言,所以不确定我们是否可以实现这一点,但如果可以的话,它将使我的函数通用。

非常感谢您的时间和帮助。

维沙尔

4

1 回答 1

2

您可以使用字符串列表字典而不是 3 个列表来存储值。

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

并使字典的键等于过滤器:“AB”,“CD”,..

然后,AB您将使用valLists["AB"]然后可以基于字符串键引用到达列表,而不是您。

另一种选择是使用反射,但这会更慢并且不必要地更复杂一些。

于 2013-03-15T14:12:02.680 回答