Saya melihat komponen MvcContrib Grid dan saya terpesona, namun pada saat yang sama jijik, oleh trik sintaksis yang digunakan dalam sintaks Grid :
.Attributes(style => "width:100%")
Sintaks di atas menetapkan atribut gaya HTML yang dihasilkan width:100%
. Sekarang jika Anda memperhatikan, 'gaya' tidak ditentukan. Itu disimpulkan dari nama parameter dalam ekspresi! Saya harus menggali ini dan menemukan di mana 'keajaiban' terjadi:
Hash(params Func<object, TValue>[] hash)
{
foreach (var func in hash)
{
Add(func.Method.GetParameters()[0].Name, func(null));
}
}
Jadi memang, kode menggunakan formal, waktu kompilasi, nama parameter untuk membuat kamus pasangan nama-nilai atribut. Sintaks yang dihasilkan memang sangat ekspresif, tetapi pada saat yang sama sangat berbahaya.
Penggunaan umum ekspresi lambda memungkinkan penggantian nama yang digunakan tanpa efek samping. Saya melihat contoh di buku yang mengatakan collection.ForEach(book => Fire.Burn(book))
saya tahu saya bisa menulis dalam kode saya collection.ForEach(log => Fire.Burn(log))
dan itu artinya sama . Tetapi dengan sintaks MvcContrib Grid di sini tiba-tiba, saya menemukan kode yang secara aktif mencari dan membuat keputusan berdasarkan nama yang saya pilih untuk variabel saya!
Jadi apakah ini praktik umum dengan komunitas C # 3.5 / 4.0 dan pecinta ekspresi lambda? Atau maverick jahat yang tidak perlu saya khawatirkan?