是否可以创建一个 returns "new KeyValuePair<T, T>(key, value)" 的方法

Is it possible to create a method which returns "new KeyValuePair<T, T>(key, value)"

我想要一个方法 returns 一个新的 KeyValuePair< T, T>

为什么?因为我想使用像

这样的方法
...
    GetAsKVP("A", "B"),
    GetAsKVP("C", "D"),
...

而不是

...
    new KeyValuePair<string, string>("A", "B"),
    new KeyValuePair<string, string>("C", "D")
...

当我将值添加到 params KeyValuePair[] pKVP

速度更快,可读性更好。

我试过了

public static KeyValuePair<T, T> GetAsKVP(T key, T value)
{
    return new KeyValuePair<T, T>(key, value);
}

并得到类似的错误;

The type or namespace name 'T' could not be found (are you missing a using directive or an assembly reference?)

在方法声明中添加T

public static KeyValuePair<T, T> GetAsKVP<T>(T key, T value)
{
    return new KeyValuePair<T, T>(key, value);
}

或者,如果您想要键和值的不同类型,请使用:

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

您可以按照描述使用它:

var kvp1 = GetAsKVP("foo", "bar");
var kvp2 = GetAsKVP(123, 456);
var kvp3 = GetAsKVP("CurrentDateTime", DateTime.UtcNow);

试试这个,

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

泛型方法必须定义类型参数,返回或接受泛型类型并不暗示它们。

在方法声明中有两个同名的类型参数没有意义。如果键和值总是相同的类型,这不是很通用,你可以这样做,

public static KeyValuePair<T, T> GetAsKVP<T>(T key, T value)
{
    return new KeyValuePair<T, T>(key, value);
}

您需要在方法头(名称后)声明T

public static KeyValuePair<T,T> GetAsKVP<T>(T key, T value)
{
    return new KeyValuePair<T, T>(key, value);
}

如果编译器无法自动确定数据类型,您可能希望将其添加到函数调用中:

GetAsKVP<string>("A", "B")