1

我经常Tuple.CreateTuple课堂上使用。现在我正在创建一个KeyValuePair

new KeyValuePair<string, MyAnnoyingButNecessarilyVerboseClass>(myString, myObj)

在这种情况下,我不想包含类型参数,因为它们使代码有点混淆了 IMO。我添加了以下内容来模仿Tuple.Createfor KeyValuePairs

public static class KVP
{
    public static KeyValuePair<TKey, TValue> Create<TKey, TValue>(TKey key, TValue value)
    {
        return new KeyValuePair<TKey, TValue>(key, value);
    }
}

所以我可以写

KVP.Create(myString, myObj)

不必显式包含类型参数,因为它们是从其他参数推断出来的。这很好用,我没有看到任何缺点。所以我有几个非常相关的问题。

  1. 为什么 C# 不包含System.KeyValuePair具有静态创建方法的非泛型类?(“他们没有这样做是因为他们不想将精力投入到提供很少价值的功能上”是一个完全可以接受且可以理解的答案)
  2. 我错过了一个做类似事情的功能吗?
  3. 创建一个KeyValuePair我缺少的课程有缺点吗?
  4. 有没有更简洁的方法来创建泛型KeyValuePair(除了明显缩短类和函数名:))?
4

3 回答 3

1

为什么 C# 不包含System.KeyValuePair具有静态创建方法的非泛型类?(“他们没有这样做是因为他们不想将精力投入到提供很少价值的功能上”是一个完全可以接受且可以理解的答案)

问题不适合 SO,怀疑它是否真的有答案。

我错过了一个做类似事情的功能吗?

不,从 .net 4.5 开始,框架中没有一个。

创建一个KeyValuePair我缺少的课程有缺点吗?

不,我自己创造了一个。

有没有更简洁的方法来创建泛型KeyValuePair

不,这和你在 C# 中所做的一样简洁

于 2013-10-23T13:28:12.960 回答
0

我认为 KeyValuePair 只存在,因为它比 Tuple 早了几个 C# 版本。使用 Tuple,他们只是想出了一种更好的做事方式。

于 2013-05-22T23:30:02.030 回答
0

a non generic equivalent for

KeyValuePair<TKey, TValue>

is

System.Collections.DictionaryEntry 
于 2013-10-23T13:22:15.753 回答