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

时间:2016-02-04 15:12:45

标签: c# dictionary selenium-chromedriver

我将通过一个例子展示我的问题:

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

返回类型为Dictionary<string, object>的对象。 在这个对象中,我需要一个键userDataDir

我是否必须先将对象强制转换为字典,或者我可以执行一些单行操作:

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

您可以使用as

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

当然,这可以让您了解可能的空引用异常。使用C#6,您可以使用null-conditional来缓解这种情况。

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"];
}