gpt4 book ai didi

c# - 在 Dictionary<> 子类中重命名 Key 和 Value 属性的最简单方法是什么

转载 作者:太空狗 更新时间:2023-10-30 01:19:54 27 4
gpt4 key购买 nike

我有一个包含多层嵌套字典的复杂数据容器。

但是有KeyValue属性使其不直观且难以使用。

请建议在 Dictionary<,> 中重命名键和值属性的最简单方法子类。

更新:

Patryk Ćwiek:如果你实现 IDictionary<TKey, TValue> ,您也不能重命名属性,因为它们是契约(Contract)的一部分。

你是对的。我的问题不正确。 KeyValuePair 的用法在IDictionary将对属性限制为 KeyValue .因此,如果我们想要非键/值对,我们必须实现 IDictionary定制 KeyValuePair结构。或者可能还有其他一些棘手的方法?

附言。也许有人建议 IDictionary代码生成模板?

最佳答案

使用您想要的属性名称制作您自己的界面。然后,让您的具体类实现您的自定义接口(interface)。

为了让您的代码保持干燥,请创建一个您将所有工作委托(delegate)给的私有(private)字典。您甚至可以通过将所需的方法委托(delegate)给您的私有(private)变量,使您的自定义接口(interface)成为可枚举的(或 IDictionary 实现的任何其他接口(interface))。

这是一个例子。您只需要将代码从使用 IDictionary 更改为 IComplexDataContainer

  interface IComplexDataContainer<TKey, TValue>
: IEnumerable<KeyValuePair<TKey,TValue>>
{
TValue this[TKey index] { get; set; }
}

class MyComplexDataContainer<TKey, TValue>
: IComplexDataContainer<TKey, TValue>
{
IDictionary<TKey, TValue> hiddenHelper { get; set; }

public MyComplexDataContainer()
{
hiddenHelper = new Dictionary<TKey, TValue>();
}

// delegate all of the work to the hidden dictionary
public TValue this[TKey index]
{
get
{
return hiddenHelper[index];
}
set
{
hiddenHelper[index] = value;
}
}

// Just delegate the IEnumerable interface to your hidden dictionary
// or any other interface you want your class to implement
public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator()
{
return hiddenHelper.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}

然后你就可以像这样使用:

  IComplexDataContainer<string, int> myData = new MyComplexDataContainer<string,int>();
myData["tom"] = 18;
myData["dick"] = 22;
myData["harry"] = myData["tom"];

关于c# - 在 Dictionary<> 子类中重命名 Key 和 Value 属性的最简单方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21328016/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com