在包含许多不同类型的子对象的大对象的初始化中......
我有一个返回KeyValuePair<string, object>. 我想在初始化 a 时调用它Dictionary<string, object>,如下所示:
AdditionalProperties = new Dictionary<string,object>(ams.GetKVP(AvaloqTypes.Person.PersonDocm.CountryId))
Run Code Online (Sandbox Code Playgroud)
这会出现编译错误“无法从 KeyValuePair 转换为 IDictionary”
我可以按如下方式解决此问题:
AdditionalProperties = new Dictionary<string,object>()
{
{ ams.GetKVP(AvaloqTypes.Person.PersonDocm.DocmItem).Key,
ams.GetKVP(AvaloqTypes.Person.PersonDocm.DocmItem).Value
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这意味着该GetKVP方法被调用两次。
有没有不涉及改变GetKVP方法的更好的解决方案?
没有Dictionary以 takeIKeyValuePair作为参数的构造函数重载。KeyValuePair但是你可以在实例化 new 时传递一个集合Dictionary:
var kvp = new Dictionary<string,object>(new []
{
ams.GetKVP(AvaloqTypes.Person.PersonDocm.CountryId)
});
Run Code Online (Sandbox Code Playgroud)
编辑:此构造函数仅存在于 .NET Core 中
您始终可以将 kvp 提取到变量并使用它,因此该方法不会被调用两次。
var kvp = ams.GetKVP(AvaloqTypes.Person.PersonDocm.DocmItem);
AdditionalProperties = new Dictionary<string,object>() { { kvp.Key, kvp.Value } }
Run Code Online (Sandbox Code Playgroud)
但我会质疑在这种情况下使用 kvp 的选择,或者如果只有一个 kvp,则选择字典?