我正在开发一个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作为字符串访问。所以我需要获取字母表列表中的项目名称。似乎列表没有任何名称属性。
答案 0 :(得分:2)
你要求的是不可能的。 a
,b
和c
是由编译器解析的局部变量名,但实际上并未在整个过程中保留。最终编译的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");