【问题标题】:How to retrieve name of Array which is stored in wpf list如何检索存储在 wpf 列表中的数组名称
【发布时间】:2012-09-14 19:22:46
【问题描述】:

在我的一个应用程序中,我声明了一个列表

public List<double[]> pane1 = new List<double[]>();

//下面的代码是在这个列表中添加一些双精度数组

pane1.Add(imp);

pane1.Add(normal);

pane1.Add(useless);

// 下面的代码正在从这个列表中检索值

            foreach (double[] pan in pane1)
            {
                int diffx = ds.data.Length - pan.Length;
                int pointx = ptx - diffx;

                if (pointx < 0)
                    pointx = 0;


                double tip = pan[pointx];
                tt = tt.Append("\n");
                //tt = tt.Append(pan.ToString());
                tt = tt.Append("\t");
                tt = tt.Append(Math.Round(tip, 2));


            }

问题:我能够成功检索这些数组的数据,但我也想检索数组的名称,可以吗?

【问题讨论】:

  • “数组名称”是什么意思?
  • 当我将它们存储到列表中时指向数组的变量的名称

标签: wpf


【解决方案1】:

你所要求的是不可能的。您似乎正在寻找的“名称”不是“数组的名称”;它只是一个恰好指向数组的变量的名称。

一次可能有多个变量指向同一个数组。举个例子,您是否希望您在代码中注释掉的行写成pan?毕竟那是指向当前数组的a变量的名字。

【讨论】:

  • 我从没想过注释行会执行,动机只是为了表明,在这一行中我打算存储该数组变量的名称。
  • 任何建议我如何实现我的要求,编程中没有什么是不可能的,如果不是这样,那么可能是其他方式,你能告诉我如何存储这些数组变量的名称吗.
  • @NidhiSharma:那么,您认为那一行中数组变量的名称是什么?总是pan?还是impnormaluseless 之一?我试图说明为什么没有给定数组的名称之类的东西,因为在任何给定时间都可以有任意数量的变量指向该数组。
  • @NidhiSharma:如果您希望将名称一起存储在数组中,只需定义一个包含两个字段的结构或类;一个数组和一个字符串。让您的 pane1 列表包含该类型的实例,而不仅仅是数组。
  • 感谢 Mapper 你给了我可以工作的想法,虽然 jon 给出了解决方案,但我从未使用过字典,也无法从谷歌获得资源以继续前进,所以我正在实施你的想法
【解决方案2】:

编译程序时源代码中的变量名称会丢失,因此您永远不能这样做。你可以做的是使用Dictionary 而不是List

public Dictionary<string, double[]> pane1 = new Dictionary<string, double[]>();

pane1["imp"] = imp;
pane1["normal"] = normal;
pane1["useless"] = useless;

然后您可以在不关注键(名称)的情况下遍历 pane1.Values 来获取数组,或者遍历 pane1 来获取名称/数组对,或者使用

var imp = pane1["imp"];

【讨论】:

  • 我以前从未使用过字典,请告诉我,如何检索值和这些名称
  • @NidhiSharma:这一切都在文档中;您还可以通过谷歌搜索找到很多信息。 Dictionary 是一个非常受欢迎的课程。
  • 最后一个问题,你知道 imp 、 normal 和 useless 是变量名,它们指向长度为 1000 的数组,pane1["imp"] = imp ;你的意思是说我可以检索数据
  • @NidhiSharma:你当然会。 double d = pane1["imp"][500]
  • 虽然可以按照描述的方式实现这一点,但我不相信这是一个好的解决方案,因为本质上,我们正在根据它的值查找一个键(即与什么字典相反)打算做)。当然,如果这只是对所有值的迭代,那也没关系。
【解决方案3】:

你指的是这样的东西吗?

using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Reflection;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<double[]> pane1 = new List<double[]>();
            Check(() => pane1);
        }

        static void Check<T>(Expression<Func<T>> expr)
        {
            var body = ((MemberExpression)expr.Body);
            Console.WriteLine("Name is: {0}", body.Member.Name);
        }
    }
}

这将产生以下输出:

变量名是:pane1

【讨论】:

  • 我想我无法很好地解释问题,所以请通过投票结束我的问题
猜你喜欢
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-03
  • 2020-07-22
  • 2017-11-05
  • 1970-01-01
  • 2021-08-02
相关资源
最近更新 更多