C# 是否有创建键/值对的简写语法?

问题描述 投票:0回答:0

我有一个像这样声明的 C# 方法:

public void Process<K, V>(params KeyValuePair<K, V>[] items)
{
    ...
}

这个方法的用法看起来有点难看;例如:

Process(
    new KeyValuePair("key", "value"),
    new KeyValuePair(123, Guid.NewGuid())
);

在 Kotlin 中,您可以使用 to 中缀函数创建对;例如:

val pair1 = "key" to "value"
val pair2 = 123 to UUID.randomUUID()

所以等价的方法用法看起来更整洁一些;例如:

process("key" to "value", 123 to UUID.randomUUID())

C# 没有中缀函数,但可以通过扩展方法实现几乎等同的功能;例如:

public static KeyValuePair<K, V> To<K, V>(this K key, V value) where K : notnull
{
    return new KeyValuePair(key, value);
}

var pair1 = "key".To("value");
var pair2 = 123.To(Guid.NewGuid());

Process("key".To("value"), 123.To(Guid.NewGuid()));

这似乎不是最优雅的解决方案,所以我正在考虑的另一件事是 C# 具有字典初始化语法;例如:

new Dictionary<object, object>()
{
    ["key"] = "value",
    [123] = Guid.NewGuid()
}

new Dictionary<object, object>()
{
    { "key", "value" },
    { 123, Guid.NewGuid() }
}

所以我想知道字典初始化语法是否可以应用于方法参数;例如:

Process({ ["key"] = "value", [123] = Guid.NewGuid() });

Process({{ "key", "value" }, { 123, Guid.NewGuid() }});

问题

作为方法参数的字典初始化语法是否可行,还是编译器在使用字典时提供的语法糖?

还有其他优雅的方法来创建 paramsKeyValuePair<K, V> 吗?

c# dictionary key-value
© www.soinside.com 2019 - 2024. All rights reserved.