Akankah ConfigurationManager.AppSettings ["blah"] memunculkan pengecualian jika "blah" tidak ada?

124

Akankah ConfigurationManager.AppSettings ["blah"] memunculkan pengecualian jika "blah" tidak ada di web / app.config?

Permintaan maaf yang tulus atas pertanyaan yang sangat malas ini.

Ben Aston
sumber
5
-1: Karena Anda telah menyadari bahwa ini adalah pertanyaan yang malas, bukankah sebenarnya hanya mencobanya akan menjadi kurang berhasil daripada memposting pertanyaan ini di sini?
Lasse V. Karlsen
Atau melihat dokumentasi untuk NameValueCollection.Itemproperti ...
Tim Robinson
2
Terima kasih untuk yang menjawab. Saya akan mencoba dan tidak membuat kebiasaan pertanyaan seperti ini.
Ben Aston
49
Pfh. Silakan terus mengajukan pertanyaan seperti ini karena saya dan seluruh dunia google configurationmanager appsettings tidak ada kunci karena lebih mudah daripada mem-parsing MSDN. Apa pun yang membuat hidup IMO sedikit lebih mudah. Suara positif karena F Dbags tersebut.
Cory Mawhorter
31
Lihatlah pertanyaan malas Anda menyelamatkan orang lain beberapa menit waktu 4 tahun dan terus bertambah. :)
Matt Beckman

Jawaban:

133

Tidak, itu kembali null.

Tim Robinson
sumber
25

Dari dokumentasi MSDN untuk NameValueCollection.Item Property (String) :

Peringatan

Properti ini mengembalikan null dalam kasus berikut: 1) jika kunci yang ditentukan tidak ditemukan; dan 2) jika kunci yang ditentukan ditemukan dan nilai yang terkait adalah null. Properti ini tidak membedakan antara dua kasus.

Martin Liversage
sumber
7

Tidak, itu kembali null.

AppSettings adalah NameValueCollection - sesuai dengan kehati - hatian di halaman NameValueCollection.Get :

Metode ini mengembalikan referensi null (Tidak ada dalam Visual Basic) dalam kasus berikut: 1) jika kunci yang ditentukan tidak ditemukan; dan 2) jika kunci yang ditentukan ditemukan dan nilai yang terkait adalah referensi null (Tidak ada dalam Visual Basic). Metode ini tidak membedakan kedua kasus tersebut.

Dexter
sumber
6

Tidak, itu kembali null.

ConfigurationManager.AppSettingsadalah NameValueCollection- dari dokumentasi MSDN :

Metode Dapatkan tidak membedakan antara null yang dikembalikan karena kunci yang ditentukan tidak ditemukan dan null yang dikembalikan karena nilai yang terkait dengan kunci tersebut adalah null.

(penekanan saya)

Andrew
sumber
3

Jawaban lain merujuk pada dokumentasi untuk properti Item. Mungkin tidak segera jelas mengapa mereka relevan dengan melihat cuplikan kode berikut.

ConfigurationManager.AppSettings["blah"]

Sintaks braket persegi digunakan dalam C # untuk mengakses pengindeks. Ini adalah properti khusus yang memungkinkan kelas diindeks dengan cara yang sama seperti array. Melihat definisi properti NameValueCollection.Item , Anda akan melihat bahwa itu tidak menggunakan sintaks properti normal. Kata kunci ini dan parameter pengindeks digunakan untuk mendefinisikan properti ini sebagai pengindeks.

public string this[
    string name
] { get; set; }

Dalam dokumentasi, pengindeks secara implisit dinamai Item dan parameter dikelilingi oleh tanda kurung siku.

Pengindeks seperti yang ditunjukkan dalam dokumentasi MSDN.

Tidak jelas bagi saya mengapa ada jawaban yang mereferensikan metode Dapatkan - mungkin yang satu memanggil yang lain?

Bagaimanapun, untuk menjawab pertanyaan ...

Tidak. Pengecualian tidak akan diberikan jika Anda mengakses kunci yang tidak ada - null akan dikembalikan.

Berikut adalah bagian yang relevan dari dokumentasi properti NameValueCollection.Item .

Properti ini mengembalikan null dalam kasus berikut: 1) jika kunci yang ditentukan tidak ditemukan; dan 2) jika kunci yang ditentukan ditemukan dan nilai yang terkait adalah null. Properti ini tidak membedakan antara dua kasus.

Scott Munro
sumber
-2

Ya http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.appsettings.aspx

Sunting: ini jelas salah. Kiri untuk komentar bermanfaat di bawah ini.

Ben Aston
sumber
1
jawaban atas pertanyaan Anda adalah Tidak seperti @Tim disebutkan. Halaman yang ditunjuk hanya mengatakan bahwa jika pengaturan aplikasi tidak dapat dimuat maka pengecualian akan dilemparkan. Tetapi jika nilai tidak ada di pengaturan aplikasi, maka Anda tidak akan mendapatkan pengecualian. Sangat tidak masuk akal untuk melontarkan kesalahan hanya karena suatu nilai tidak ada dalam kamus. Tetapi jika kamus tidak ada maka itu akan menjadi alasan untuk membuat kesalahan. (Istilah kamus baru saja digunakan untuk merujuk pada koleksi sewenang-wenang.)
spinon
Tautan itu mengatakan bahwa pengecualian akan dilemparkan jika NameValueCollectiontidak dapat ditemukan - yaitu sistem tidak dapat menemukan pengaturan apa pun . Koleksi Nilai Nama tidak membuat pengecualian saat Anda mencoba mengambil satu nilai yang tidak ada ..
Dexter