如何从字典对象中获取特定值?

How to Get a Specific Value from an Object that is a Dictionary?

我将举例说明我的问题:

ChromeDriver chrome = new ChromeDriver();
chrome.Capabilities.GetCapability("chrome");

Returns 类型为 Dictionary<string, object> 的对象。 在这个对象中有一个键 userDataDir,我需要它的值。

我是否必须先将对象转换为字典,或者我可以做一些像这样的单行代码:

chrome.Capabilities.GetCapability("chrome").GetType().GetProperty("userDataDir").GetValue()

上面的行不是为了澄清而编译的。

如果chrome.Capabilities.GetCapability("chrome");的返回类型是Dictionary<string, object>

您可以通过将返回的对象转换为字典来执行以下操作:

var capability = (Dictionary<string, object>)chrome.Capabilities.GetCapability("chrome");
var userDataDir = capability["userDataDir"];

您可以使用 as

在一行中进行转换
var userDataDir = (chrome.Capabilities.GetCapability("chrome") as Dictionary<string, object>)["userDataDir"];

当然,这会让您面临可能的空引用异常。使用 C# 6,您可以使用 null 条件来缓解这种情况。

var userDataDir = (chrome.Capabilities.GetCapability("chrome") as Dictionary<string, object>)?["userDataDir"];

但是你不知道 null 是否是字典中的一个值,或者它是否是 null 因为转换失败。最好的办法就是在多行中执行此操作。

var dic = chrome.Capabilities.GetCapability("chrome") as Dictionary<string, object>;
if(dic == null)
{
    // The capability isn't a dictionary.
}
else
{
    var userDataDir = dic["userDataDir"];
}