我将通过一个例子展示我的问题:
ChromeDriver chrome = new ChromeDriver();
chrome.Capabilities.GetCapability("chrome");
返回类型为Dictionary<string, object>
的对象。
在这个对象中,我需要一个键userDataDir
。
我是否必须先将对象强制转换为字典,或者我可以执行一些单行操作:
chrome.Capabilities.GetCapability("chrome").GetType().GetProperty("userDataDir").GetValue()
上面的行不是为了澄清而编译的。
答案 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"];
}