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

  • Jimmie Jones

    Jimmie Jones

    16 Kasım 2007
  • Juan Carlos Candela Bordera

    Juan Carlos

    4 Mart 2009
  • TheFlashCentre

    TheFlashCent

    22 Mayıs 2008