Sto lavorando con l'API gestita dei servizi Web di Exchange, con i dati di contatto. Ho il seguente codice, che è funzionale , ma non ideale:
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...
}
Come ho già detto, questo codice funziona . Ora voglio farlo succhiare un po 'meno , se possibile.
Non riesco a trovare alcun metodo che mi consenta di verificare l'esistenza della chiave nel dizionario prima di tentare di accedervi e se provo a leggerlo (con .ToString()
) e non esiste, viene generata un'eccezione:
500
La chiave fornita non era presente nel dizionario.
Come posso refactoring questo codice per succhiare di meno (pur essendo ancora funzionale)?
TryGetValue
approccio sembra essere la soluzione migliore, dato che ho trovato questa pagina: goo.gl/7YN6 ... ma non sono sicuro di come usarlo. Nel mio codice sopra,row
c'è un oggetto 'DataRow`, quindi non sono sicuro che il tuo codice di esempio sia giusto, però ...