c# - 如何获取列表的名称

标签 c# .net list dictionary

我先创建一个列表

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

最佳答案

正如我评论的那样,您只能使用非常时髦的语法来做到这一点。这是我的意思的一个例子

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;
    }
}

主要问题是你需要字典来存储表达式,而不是列表

其次,要真正访问列表,您需要这样做:

var list = _d[1].Compile()();

最后,如果 dummy1 被重新分配,您将失去对您期望的列表的引用。

简而言之,您不太可能需要这样做。代码中的变量名很少会真正影响行为。

关于c# - 如何获取列表的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31332004/

相关文章:

从列表中删除重复的元素

c# - 处理自定义 DrawingVisual 对象 UIElement 上的鼠标点击事件

c# - Windows Phone 8 中的弹出窗口

.net - MSBuild 无法识别/理解属性

c# - lambda->表达式树转换过程是否在任何地方指定?

list - Groovy中如何实现列表的元素添加?

c# - 在C#中将字母字符串转换为整数

c# - 如何将我的应用程序绑定(bind)到特定硬件?

.net - 在 C# 控制台应用程序中隐藏控制台窗口

list - 在 Haskell 中将列表分组为包含 n 个元素的列表