使用 KeyValuePair 初始化字典

Rob*_*man 3 c#

在包含许多不同类型的子对象的大对象的初始化中......

我有一个返回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方法的更好的解决方案?

Ole*_*egI 6

没有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 中

关联


Jan*_*nen 5

您始终可以将 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,则选择字典?