我有一个像这样声明的 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() }});
问题
作为方法参数的字典初始化语法是否可行,还是编译器在使用字典时提供的语法糖?
还有其他优雅的方法来创建 params
的 KeyValuePair<K, V>
吗?