如何获取List <string>的名称

时间:2016-06-01 14:23:31

标签: c# list

我正在开发一个C#WPF应用程序。以下是我的代码示例:

private static List<string> a = new List<string>();
private static List<string> b = new List<string>();
private static List<string> c = new List<string>();

然后我有另一个这样的列表:

private static List<List<string>> alphabet = new List<List<string>>() { a, b, c };

我需要将a,b或c作为字符串访问。所以我需要获取字母表列表中的项目名称。似乎列表没有任何名称属性。

1 个答案:

答案 0 :(得分:2)

你要求的是不可能的。 abc是由编译器解析的局部变量名,但实际上并未在整个过程中保留。最终编译的DLL或EXE不包含这些变量的名称,只是对内存位置的引用。没有办法在运行时获取这些名称 - 它们不属于数据结构,也不能作为元数据使用。

似乎您所追求的是能够按名称访问特定列表,但a)列表没有名称,b)列表,外部列表,isn&# 39;用于按名称访问对象的良好数据结构。与PHP默认使用associative arrays的语言不同,C#对其数据结构更严格 - List<T>是索引可访问的数组支持列表,而不是关联数组。

如果您打算按名称访问对象,则必须使用为其设计的数据结构 - 在本例中为Dictionary<string, List<string>>。这将允许您将名称设置为访问对象的键:

private List<string> a = new List<string>();
private List<string> b = new List<string>();
private List<string> c = new List<string>();

private Dictionary<string, List<string>> lists = new Dictionary<string, List<string>>();  
lists.Add("a", a);
lists.Add("b", b);
lists.Add("q", c); // note that the key isn't related to the variable name.

然后,您可以通过Dictionary的索引器属性按名称访问特定列表:

var cList = lists["q"];

替代解释

由于您的问题并不完全清楚,因此根据一条评论,您可能只是想将List<string>类扩展为带有名称,这可能是出于某种原因 - 也许存储与其关联的SQL表名称,即使这是一个非常糟糕的设计,将您的代码耦合到特定的数据库结构。

这可以通过继承List<string>并添加新属性来实现:

public class NamedList<T> : List<T>
{
     public NamedList(string name)
     {
          Name = name;
     }
     public string Name {get;set;}
}

现在,您不是创建List<string>,而是创建名称列表:

var a = new NamedList<string>("a");
var q = new NAmedList<string>("c");