Je travaille avec l'API gérée des services Web Exchange, avec les données de contact. J'ai le code suivant, qui est fonctionnel , mais pas idéal:
foreach (Contact c in contactList)
{
string openItemUrl = "https://" + service.Url.Host + "/owa/" + c.WebClientReadFormQueryString;
row = table.NewRow();
row["FileAs"] = c.FileAs;
row["GivenName"] = c.GivenName;
row["Surname"] = c.Surname;
row["CompanyName"] = c.CompanyName;
row["Link"] = openItemUrl;
//home address
try { row["HomeStreet"] = c.PhysicalAddresses[PhysicalAddressKey.Home].Street.ToString(); }
catch (Exception e) { }
try { row["HomeCity"] = c.PhysicalAddresses[PhysicalAddressKey.Home].City.ToString(); }
catch (Exception e) { }
try { row["HomeState"] = c.PhysicalAddresses[PhysicalAddressKey.Home].State.ToString(); }
catch (Exception e) { }
try { row["HomeZip"] = c.PhysicalAddresses[PhysicalAddressKey.Home].PostalCode.ToString(); }
catch (Exception e) { }
try { row["HomeCountry"] = c.PhysicalAddresses[PhysicalAddressKey.Home].CountryOrRegion.ToString(); }
catch (Exception e) { }
//and so on for all kinds of other contact-related fields...
}
Comme je l'ai dit, ce code fonctionne . Maintenant, je veux le faire sucer un peu moins , si possible.
Je ne trouve aucune méthode qui me permette de vérifier l'existence de la clé dans le dictionnaire avant d'essayer d'y accéder, et si j'essaie de la lire (avec .ToString()) et qu'elle n'existe pas, une exception est levée:
500
La clé donnée n'était pas présente dans le dictionnaire.
Comment puis-je refactoriser ce code pour aspirer moins (tout en étant fonctionnel)?
TryGetValueapproche semble être la meilleure solution, car j'ai trouvé cette page: goo.gl/7YN6 ... mais je ne sais pas comment l'utiliser. Dans mon code ci-dessus,rowest un objet 'DataRow`, donc je ne suis pas sûr que votre exemple de code soit correct, cependant ...