簡體   English   中英

關鍵值對的簡明動態列表

[英]Concise Dynamic List of Key Value Pairs

我正在寫一個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);
  }
}

請注意,這只是pseduocode。 然后我想用這樣的東西來調用這個函數:

PrettyPrint("Results:", { quantity:4, total:"$1.23", tax:"0.10" });

我使用C#看到的所有內容對於傳遞鍵值對而言似乎都很笨重。 我是否有些偏見? 是否有簡潔的方法只是在C#中傳遞鍵值對的動態列表

你可以使用C#7的值元組params關鍵字:

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)的循環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}");
    }
}

我認為最接近(通過語法)你可以通過接受普通object並反映其屬性來實現:

public static void PrettyPrint(string message, object kvp) {
    if (kvp == null)
        return;
    Console.WriteLine(message);
    foreach (var p in kvp.GetType().GetProperties()) {
        Console.Write(p.Name + "\t\t\t" + p.GetValue(kvp));
    }
}

那是因為那時你可以在那里傳遞匿名對象:

PrettyPrint("Results:", new { quantity = 4, total = "$1.23", tax = "0.10" });

這基本上和你在javascipt中所做的一樣(你用什么語法作為你想要的例子)。

您可以使用Dictionaryhttps://msdn.microsoft.com/de-de/library/xfhwa508(v=vs.110).aspx )或List<Tuple<string,float>>例如

PrettyPrint("Results:", new Dictionary<string, float>() 
{
   { "quantity",4 }, 
   { "total", 1.23 }
});

例如,您可以使用Json.Net。 這樣您就可以絕對提交任何對象。

public void PrettyPrint(string message, object kvp)
{
    Console.WriteLine(message);
    var json = JsonConvert.SerializeObject(kvp, Formatting.Indented);
    Console.WriteLine(json);
}

結果很漂亮。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM