我先创建一个列表
List<String> dummy1 = new List<String>();
List<String> dummy2 = new List<String>();
List<String> dummy3 = new List<String>();
List<String> dummy4 = new List<String>();
在我将列表添加到词典
之前Dictionary<int, List<String>> _d = new Dictionary<int, List<String>>()
{
{1, dummy1},
{2, dummy2},
{3, dummy3},
{4, dummy4},
};
然后我希望通过循环键
获得列表的名称foreach (var key in _d.Keys)
{
MessageBox.Show(_d[key].GetType().Name);
}
但输出为list 1
,我想得到
dummy1
dummy2
dummy3
dummy4
答案 0 :(得分:2)
您正在将数据分配给变量名称,并且您将获取变量名称以访问数据。我将创建一个带有Name和List的简单对象,并将其添加到Dictionary中。
答案 1 :(得分:2)
正如我评论的那样,你只能用非常时髦的语法来做到这一点。这是我的意思的一个例子
void Main()
{
List<String> dummy1 = new List<String>();
List<String> dummy2 = new List<String>();
List<String> dummy3 = new List<String>();
List<String> dummy4 = new List<String>();
var _d = new Dictionary<int, Expression<Func<List<String>>>>()
{
{1, () => dummy1},
{2, () => dummy2},
{3, () => dummy3},
{4, () => dummy4},
};
foreach(var kvp in _d)
{
MessageBox.Show(kvp.Value.nameof());
}
}
// Define other methods and classes here
public static class TestExtension
{
public static String nameof<T>(this Expression<Func<T>> accessor)
{
return nameof(accessor.Body);
}
public static String nameof<T, TT>(this T obj, Expression<Func<T, TT>> propertyAccessor)
{
return nameof(propertyAccessor.Body);
}
private static String nameof(Expression expression)
{
if (expression.NodeType == ExpressionType.MemberAccess)
{
var memberExpression = expression as MemberExpression;
if (memberExpression == null)
return null;
return memberExpression.Member.Name;
}
return null;
}
}
主要问题是您需要字典来存储表达式,而不是List
其次,要实际访问列表,您需要这样做:
var list = _d[1].Compile()();
最后,如果dummy1被重新分配,你将失去对你期望的列表的引用。
简而言之,您不太可能需要这样做。代码中的变量名实际上应该实际影响行为。
答案 2 :(得分:1)
只需创建一个继承自List<string>
并具有Name属性的自定义类。
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
MyList dummy1 = new MyList("dummy1");
MyList dummy2 = new MyList("dummy2");
MyList dummy3 = new MyList("dummy3");
MyList dummy4 = new MyList("dummy4");
Dictionary<int, MyList> _d = new Dictionary<int, MyList>()
{
{1, dummy1},
{2, dummy2},
{3, dummy3},
{4, dummy4},
};
foreach (var key in _d.Keys)
{
Console.WriteLine(_d[key].Name);
}
}
}
public class MyList : List<String>
{
private string name;
public string Name
{
get
{
return name;
}
}
public MyList(string name)
{
this.name = name;
}
}
结果:
dummy1
dummy2
dummy3
dummy4
答案 3 :(得分:0)
而不是创建存储int和列表的Dictionary:
Dictionary<int, List<String>>
创建一个字典,用于存储列表名称:
Dictionary<string, List<String>>
如果您想获得与列表对应的int编号,您可以使用普通的for
循环,并在我们说i = 1
时查看该位置的值。