SORU
13 Mayıs 2010, PERŞEMBE


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

Bu kodu nasıl daha az emmek için hala işlevsel olurken () yeniden miyim?

CEVAP
13 Mayıs 2010, PERŞEMBE


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • booba1234

    booba1234

    22 Temmuz 2006
  • Dive In

    Dive In

    17 Temmuz 2013
  • Music EuroDance 2

    Music EuroDa

    12 Mayıs 2011