[英]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中所做的一樣(你用什么語法作為你想要的例子)。
您可以使用Dictionary
( https://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.