2016-02-04 2 views
-1

Je vais vous montrer ma question par un exemple:Comment obtenir une valeur spécifique à partir d'un objet qui est un dictionnaire?

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

Renvoie un objet qui est de type Dictionary<string, object>. A l'intérieur de cet objet, il y a une clé dont la valeur est userDataDir.

Dois-je jeter l'objet à un premier dictionnaire ou puis-je faire une seule ligne comme:

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

La ligne ci-dessus n'est pas compilé juste pour clarifier.

+0

La valeur dans le dictionnaire est-elle un dictionnaire dont vous voulez accéder à la clé? – HimBromBeere

+0

avez-vous même essayé une recherche google peut-être 'comment récupérer les valeurs d'un dictionnaire'? http://stackoverflow.com/questions/378465/retrieving-dictionary-value-best-practices – MethodMan

+0

Voulez-vous dire que le type de retour de 'GetCapability' est' Dictionary 'ou est le type de retour' object' et l'objet spécifique que vous obtenez est un 'Dictionary ' que vous devez lancer en premier? – juharr

Répondre

1

Vous pouvez faire la distribution sur une ligne avec as

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

Bien sûr, cela vous ouvre à d'éventuelles exceptions de référence nulles. Avec C# 6 vous pouvez utiliser le null-conditionnel pour atténuer cela.

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

Mais vous ne savez pas si null était une valeur dans le dictionnaire ou si elle était null parce que le casting a échoué. Le meilleur pari est juste de le faire en plusieurs lignes.

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

En fait, dans mon cas, il ne peut pas être nul, car cela indiquera que la fonctionnalité est fausse en premier lieu. – Moshisho

1

Si le returntype de chrome.Capabilities.GetCapability("chrome"); est Dictionary<string, object>

Vous pouvez faire comme suit, en jetant l'objet retourné à un dictionnaire:

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