Saya memiliki tipe objek anonim yang saya terima sebagai dinamika dari metode yang saya ingin periksa di properti yang ada pada objek itu.
....
var settings = new {
Filename="temp.txt",
Size=10
}
...
function void Settings(dynamic settings) {
var exists = IsSettingExist(settings,"Filename")
}
Bagaimana cara menerapkan IsSettingExist?
Jawaban:
Keluaran:
sumber
ViewBag
? Jika demikian, lihat stackoverflow.com/a/24192518/70345Is
awalan menjadi lebih membingungkan daripada yang akan digunakanHasProperty
. Saya juga akan mengatakan bahwa menggunakan awalan yang salah secara tata bahasa seperti ini sebenarnya non-idiomatik di C♯.sumber
objType.GetProperty(name) != null;
mengembalikan null pada properti yang adaobjType.GetProperty(name) != null
akan selalu mengembalikan abool
, yang (menurut definisi) tidak akan pernah bisanull
.Type.GetProperty(string)
untuk properti yang tidak ada mengembalikan apa pun selain null.jika Anda dapat mengontrol pembuatan / penerusan objek pengaturan, saya akan merekomendasikan menggunakan ExpandoObject sebagai gantinya.
sumber
Ini berfungsi untuk jenis anonim
ExpandoObject
,Nancy.DynamicDictionary
atau apa pun yang dapat ditransmisikanIDictionary<string, object>
.sumber
Ini bekerja untuk saya-:
sumber
RuntimeBinderException
dandynamicObj[property].Value
ketika nilai sebenarnya ada ...var value = dynamicObj[property]
cukup ... dan ketika itu tidak adaKeyNotFoundException
diDictionary
dilemparkan ... lihat di bawah ...Tak satu pun dari solusi di atas yang berfungsi untuk
dynamic
itu berasal dariJson
, namun saya berhasil mengubahnya denganTry catch
(oleh @ user3359453) dengan mengubah jenis pengecualian yang dilemparkan (KeyNotFoundException
bukanRuntimeBinderException
) menjadi sesuatu yang benar-benar berfungsi ...Semoga ini menghemat waktu Anda.
sumber
Menggabungkan dan memperbaiki jawaban dari Serj-TM dan user3359453 sehingga berfungsi dengan ExpandoObject dan DynamicJsonObject. Ini berhasil untuk saya.
sumber
Menggunakan refleksi, inilah fungsi yang saya gunakan:
kemudian..
sumber
Where
terlebih dahulu, kemudianAny
berlebihan, karena Anda juga dapat merumuskan ekspresi pemfilteranAny
.Jika seseorang perlu menangani objek dinamis yang berasal dari Json, saya telah memodifikasi jawaban Seth Reno untuk menangani objek dinamis yang dideserialisasi dari NewtonSoft.Json.JObjcet.
sumber
Untuk memperluas jawaban dari @Kuroro, jika Anda perlu menguji apakah propertinya kosong, di bawah ini akan berfungsi.
sumber