我正在编写一个 C# 应用程序。在该应用程序中,我需要传递任意键值对列表。我想将这些键/值传递给一个看起来像这样的实用方法:

public void PrettyPrint(string message, [type?] kvp)
{
  Console.WriteLine(message);
  foreach (var p in kvp)
  {
    Console.Write(p.Key + "\t\t\t" + p.Value);
  }
}

请注意,这只是伪代码。然后我想使用这样的东西来调用这个函数:
PrettyPrint("Results:", { quantity:4, total:"$1.23", tax:"0.10" });

我看到的所有使用 C# 的东西似乎只是传递键值对的笨重。我是否忽略了什么?是否有一种简洁的方法可以在 C# 中传递键值对的动态列表

最佳答案

你可以只使用 C# 7 的 value tuplesparams 关键字:

public static void PrettyPrint(string message, params (object key, object value)[] kvp)
{
    Console.WriteLine(message);
    foreach (var p in kvp)
    {
        Console.Write(p.key + "\t\t\t" + p.value);
    }
}

像这样调用:
PrettyPrint("Results: ", ("quantity", 4), ("total", "$1.23"), ("tax", 0.10));

或者,将这些对存储在一个变量中:
(object, object)[] pairs = {("quantity", 4), ("total", "$1.23"), ("tax", 0.10)};
PrettyPrint("Results: ", pairs);

或者更简洁地使用像 foreach (var (key, value) in kvp) 这样的循环来避免 p 和方法签名中的项目名称
public static void PrettyPrint(string message, params (object, object)[] kvp)
{
    Console.WriteLine(message);
    foreach (var (key, value) in kvp)
    {
        Console.Write($"{key}\t\t\t{value}");
    }
}

关于c# - 键值对简明动态列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50064026/

10-10 18:39