Saya bekerja dengan API yang Dikelola Layanan Web Exchange, dengan data kontak. Saya memiliki kode berikut, yang fungsional , tetapi tidak ideal:
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...
}
Seperti yang saya katakan, kode ini berfungsi . Sekarang saya ingin membuatnya sedikit menyusut , jika mungkin.
Saya tidak dapat menemukan metode apa pun yang memungkinkan saya memeriksa keberadaan kunci dalam kamus sebelum mencoba mengaksesnya, dan jika saya mencoba membacanya (dengan .ToString()
) dan tidak ada maka pengecualian dilemparkan:
500
Kunci yang diberikan tidak ada dalam kamus.
Bagaimana saya bisa memperbaiki kode ini untuk menyedot lebih sedikit (sementara masih berfungsi)?
sumber
TryGetValue
Pendekatan tampaknya seperti itu mungkin menjadi taruhan terbaik, karena saya menemukan halaman ini: goo.gl/7YN6 ... tapi aku tidak yakin bagaimana menggunakannya. Dalam kode saya di atas,row
adalah objek 'DataRow`, jadi saya tidak yakin kode contoh Anda benar, meskipun ...c.PhysicalAddresses.TryGetValue(c.PhysicalAddresses[PhysicalAddressKey.Home].Street, row["HomeStreet"]);
C# 7.0
)row["HomeStreet"] = c.PhysicalAddresses.TryGetValue(PhysicalAddressKey.Home, out PhysicalAddressEntry entry) ? entry.Street.ToString() : null;
Apa jenis
c.PhysicalAddresses
? Jika ituDictionary<TKey,TValue>
, maka Anda dapat menggunakanContainsKey
metode ini.sumber
PhysicalAddressDictionary.TryGetValue
sumber
Saya menggunakan Kamus dan karena pengulangan dan kemungkinan kunci yang hilang, saya dengan cepat menambal satu metode kecil:
Menyebutnya:
Mendapat pekerjaan.
sumber
Ini sedikit sesuatu yang saya masak hari ini. Tampaknya bekerja untuk saya. Pada dasarnya Anda mengganti metode Tambahkan di ruang nama dasar Anda untuk melakukan pemeriksaan dan kemudian memanggil metode Tambahkan dasar untuk benar-benar menambahkannya. Semoga ini berhasil untuk Anda
sumber