gpt4 book ai didi

c# - 在 Dictionary C# 中使用泛型类

转载 作者:太空宇宙 更新时间:2023-11-03 20:05:35 25 4
gpt4 key购买 nike

我需要实现一个集合(例如,SpecCollection),它应该包含KEYVALUE。键应该是复合键。请看简短的实现:

public class CompositeKey<TId, TName>
{
private TId _id;
private TName _name;

public TId Id { get; set; }
public TName Name { get; set; }
}

我应该只通过以下方式初始化我的集合:

SpecialCollection<CompositeKey<string, int>, DateTime> e = new 
SpecialCollection<CompositeKey<string, int>, DateTime>();

或者像这样:

SpecialCollection<CompositeKey<DateTime, int>, SomeClass> e = new 
SpecialCollection<CompositeKey<DateTime, int>, SomeClass>();

如果可能的话,请告诉我如何申报我的藏品?

我找到了以下方法:

public class SpecialCollection<TId, TName, TValue> 
: Dictionary<CompositeKey<TId, TName>, TValue>
{
private Dictionary<CompositeKey<TId, TName>, TValue> _baseDictionary = new
Dictionary<CompositeKey<TId, TName>, TValue>();
}

但在这种情况下,我只能像这样初始化集合对象:

SpecialCollection<DateTime, int, string> col = 
new SpecialCollection<DateTime, int, string>();

您对如何申报藏品有什么想法吗?

谢谢!

最佳答案

没有办法完全按照您的要求进行操作 - .NET 编译器不能部分直观地理解泛型的类型参数。这给您留下了三个选择。

  1. 什么都不做。您现在使用它的方式是实现此类功能的标准方式。您会自动获得所需的 key 类型 ( CompositeKey<Tid, TName>)。

  2. 放弃类型CompositeKey<> 。在这种情况下,您接受任何 CompositeKey作为 TKey值(value)。为此,您需要一个非泛型基类 CompositeKeyICompositeKey界面。您将无法访问 Tid 的类型和 TName inside SpecialCollectioN<>` 不过,因为您没有指定它可以使用的任何类型。

    public class SpecialCollection<TKey, TValue> 
    : Dictionary<TKey, TValue> where TKey : CompositeKey
    {
    private Dictionary<TKey, TValue> _baseDictionary = new
    Dictionary<TKey, TValue>();
    }
  3. 指定四个 类型参数。这样,您可以强制第一个类型为 CompositeKey<Tid, TName> , 和 SpecialCollection<>会知道它的类型是什么。另一方面,您必须指定所有四个,因为 C# 不能进行部分泛型类型推断。 (即全有或全无)。请注意,您可以将顺序更改为对您最有意义的顺序。

    public class SpecialCollection<TKey, TValue, Tid, TName> 
    : Dictionary<TKey, TValue> where TKey : CompositeKey<Tid, TName>
    {
    private Dictionary<TKey, TValue> _baseDictionary = new
    Dictionary<TKey, TValue>();
    }

关于c# - 在 Dictionary C# 中使用泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23658517/

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