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)?
TryGetValue
approche 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,row
est un objet 'DataRow`, donc je ne suis pas sûr que votre exemple de code soit correct, cependant ...