2016-02-04 54 views
-1

我會告訴我的問題用一個例子:如何從作爲字典的對象獲取特定值?

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

返回一個對象,它是Dictionary<string, object>類型。 在這個對象裏面有一個我需要的值userDataDir

我必須對象轉換爲字典第一或者我可以做一些一行代碼,如:

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

線以上未編譯只是爲了澄清。

+0

字典本身的值是一個你想訪問的密鑰的字典嗎? – HimBromBeere

+0

你甚至嘗試過谷歌搜索,或許'如何從字典中檢索值? http://stackoverflow.com/questions/378465/retrieving-dictionary-value-best-practices – MethodMan

+0

你是說'GetCapability'的返回類型是'Dictionary '或是返回類型'object'和你得到的特定對象是一個你需要首先強制轉換的'Dictionary ? – juharr

回答

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

實際上,在我的情況下,它不能爲空,因爲這將表明功能在第一個地方是錯誤的。 – Moshisho

1

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

你可以做以下的,由返回的對象強制轉換爲詞典:

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