【发布时间】:2021-01-21 19:05:16
【问题描述】:
我的 log4net 对象看起来像这样(因为我想将我的集合记录为 json 对象)
_log.Debug(new JObject(new JProperty("Prop1", "Val1"),
new JProperty("Prop2", "Val2")).ToString());
为了更好的代码可读性和轻松添加其他属性,我想做这样的事情
Utility.WriteLog({"Prop1", "Val1"},
{"Prop2", "Val2"});
我不确定 WriteLog() 方法的外观如何,除了它应该有一个 params 参数,因为需要记录的属性/值对的数量是可变的。
我考虑了一个字典(见下文),WriteLog 函数将使用字典中的属性/值键创建一个 JsonObject:
Utility.WriteLog(new Dictionary<string, string>()
{
{"Prop1", "Val1"},
{"Prop2", "Val2" }
});
这是最好的方法,还是有更简洁的替代方法?
【问题讨论】:
-
你用的是什么版本的c#?
-
你的初始版本有什么问题?
-
如果您使用的是 c# 7.0 或更高版本,您可以使用缩写的元组语法,例如
public static void WriteLog(params (string Name, object Value) [] parameters)然后像Utility.WriteLog(("Prop1", "Val1"), ("Prop2", "Val2"));一样调用它。见dotnetfiddle.net/cxRnmY。那是你要的吗?你的问题有点主观。 -
而在 c# 9.0 中,您可以使用
new () { {"Prop1", "Val1"}, {"Prop2", "Val2" } }来构建您的字典。再次查看dotnetfiddle.net/cxRnmY。 -
@Alejandro - 如果你的意思是新的 JProperty() 调用,它就是实例化一个 JObject 并为每个日志记录步骤添加 JProperty 值。