【问题标题】:Can a List<type> have names or is there a way to have a "flexible" property?List<type> 可以有名称还是有办法拥有“灵活”的属性?
【发布时间】:2019-01-02 00:05:05
【问题描述】:

我在 3D 空间(X、Y、Z)中工作。

我有一个 KDTree(感谢 Accord.Net),我正在继承并添加一个属性,该属性具有每个维度的最大值和最小值。我编写了一个构造函数,它从列表中添加值并同时获取最小值和最大值。

树(在我的例子中)可以是 1、2 或 3 维。

如果树有一个维度(X 轴),我想要一个看起来像这样的属性:

Tree.MinMax.X.Min
Tree.MinMax.X.Min

如果我的树有两个维度(比如 Y 和 Z),那么属性将如下所示:

Tree.MinMax.Y.Min
Tree.MinMax.Y.Min
Tree.MinMax.Z.Min
Tree.MinMax.Z.Min

我目前拥有的是一个列表。无法命名列表中的每个项目(据我所知)。

class MinMax
{
    internal double Min = double.MaxValue;
    internal double Max = double.MinValue;

    internal void Add(double value)
    {
        Min = msf.Min(Min, value);
        Max = msf.Max(Max, value);
    }
}

这给了我以下语法(很难理解):

Tree.MinMax[0].Min
Tree.MinMax[0].Max

有没有一种方法来命名列表元素或制作一个“灵活的属性,有点像命名元组?

【问题讨论】:

标签: c# list properties tuples


【解决方案1】:

Tree.MinMax 可以是Dictionary&lt;string, MinMax&gt;

public Dictionary<string, MinMax> MinMax = new Dictionary<string, MinMax>();

添加一个键值对(或者用你的话来说,一个“灵活的属性”),

MinMax.Add("Y", new MinMax());

然后您可以像这样访问该属性:

MinMax["Y"]

如果密钥不存在,这将抛出 KeyNotFoundException

【讨论】:

  • 感谢您的解释和清晰的示例。我没有意识到我可以使用 ["X"] 访问字典键。
  • @EricSnyder 关于这个你还有什么想问的吗?如果不是,你为什么不接受?
  • 只是在 VS 中尝试一下。我发现我也可以以同样的方式使用 SortedList 。我还可以定义一个常量 const string X = "X";然后使用 SortedList[X].Amethod();我喜欢你的解决方案,我有点想多玩一些,也等着看其他解决方案是否也会出现。
  • 很好的解决方案,效果很好,尤其是定义了常量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多