如何使用变量名称指向具有相同名称的不同数据类型?

时间:2013-03-15 14:06:21

标签: asp.net asp.net-mvc data-structures c#-3.0 logic

我有2个列表1存储可过滤列的名称(类型为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块中对分配进行硬编码,如果我可以使用第一个List名称“A_B”并从中替换“_”以指向我的第二个List并分配{ {1}}它。

我知道c#是一种静态语言,所以不确定我们是否可以实现这一点,但如果可以,它将使我的函数变得通用。

非常感谢您提前了解时间和帮助。

Vishal

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

相关问题