Nasıl bu sözlük anahtar C varsa belirleyebilirim#?
Exchange Web Hizmetleri API Yönetilen, kişi veri ile çalışıyorum. Aşağıdaki kodu varfonksiyonelama ideal değil:
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...
}
Dediğim gibi, bu kodçalışır. Şimdi Çek yapmak istiyorumbiraz daha azmümkünse.
Ben bulamıyorum yöntemleri izin verin kontrol için varlığı anahtarı sözlük denemeden önce erişim, ve eğer ben denemek için oku (.ToString()) ve öyle bir yer yok, o zaman bir özel durum:
500^ br . Verilen anahtar sözlükte yoktu.
Bu kodu nasıl daha az emmek için hala işlevsel olurken () yeniden miyim?
CEVAP
ContainsKey kullanabilirsiniz:
if (dict.ContainsKey(key)) { ... }
veya TryGetValue:
dict.TryGetValue(key, out value);
Güncellemebir yoruma göre gerçek sınıf burada ama PhysicalAddressDictionary yöntemleri Contains TryGetValue ama aynı şekilde çalışır IDictionary Bir değil.
Örnek kullanım:
PhysicalAddressEntry entry;
PhysicalAddressKey key = c.PhysicalAddresses[PhysicalAddressKey.Home].Street;
if (c.PhysicalAddresses.TryGetValue(key, out entry))
{
row["HomeStreet"] = entry;
}
Güncelleme 2:burada çalışan kod (soru soran birisi tarafından derlenmiş)
PhysicalAddressEntry entry;
PhysicalAddressKey key = PhysicalAddressKey.Home;
if (c.PhysicalAddresses.TryGetValue(key, out entry))
{
if (entry.Street != null)
{
row["HomeStreet"] = entry.Street.ToString();
}
}
...gerektiği gibi tekrarlanan iç koşullu ile her bir anahtar gerekli. Bu TryGetValue sadece bir kez PhysicalAddressKey (Ev, İş, vb) başına yapılır.

Nasıl anahtar bir sözlük sıralama yapa...
EÄŸer belirli bir anahtar C std varsa n...
Eğer bir anahtar varsa söyle Nasıl NSU...
Nasıl sql server varsa, sadece bir yab...
Nasıl sözlük olarak değişken anahtar d...