Dengan menggunakan fitur kompilasi permintaan kompiler C #, Anda dapat menulis kode seperti:
var names = new string[] { "Dog", "Cat", "Giraffe", "Monkey", "Tortoise" };
var result =
from animalName in names
let nameLength = animalName.Length
where nameLength > 3
orderby nameLength
select animalName;
Dalam ekspresi kueri di atas, let
kata kunci memungkinkan nilai diteruskan ke tempat dan operasi orberby tanpa panggilan duplikat animalName.Length
.
Apa set yang setara dengan panggilan metode ekstensi LINQ yang mencapai apa yang dilakukan kata kunci "biarkan" di sini?
c#
linq
extension-methods
linq-to-objects
LBushkin
sumber
sumber
Jawaban:
Biarkan tidak memiliki operasi sendiri; itu piggy-back off
Select
. Anda dapat melihat ini jika Anda menggunakan "reflektor" untuk memisahkan dll yang ada.itu akan menjadi sesuatu seperti:
sumber
.Dump()
metode ekstensi di LinqPad untuk melihat lambda yang dihasilkan.Ada artikel bagus di sini
Pada dasarnya
let
menciptakan tupel anonim. Ini setara dengan:sumber
it seems prudent to recommend against using the let keyword in cases where you do not need to transform a variable
This could be considered a micro-optimisation
Ada juga metode ekstensi .Let di System.Interactive, tetapi tujuannya adalah untuk memperkenalkan ekspresi lambda untuk dievaluasi 'in-line' dalam ekspresi yang lancar. Misalnya, pertimbangkan (dalam LinqPad, katakanlah) ekspresi berikut yang membuat angka acak baru setiap kali dieksekusi:
Untuk melihat bahwa sampel acak baru muncul setiap waktu, pertimbangkan yang berikut ini
yang menghasilkan pasangan di mana kiri dan kanan berbeda. Untuk menghasilkan pasangan di mana kiri dan kanan selalu sama, lakukan sesuatu seperti berikut:
Jika kita bisa memanggil ekspresi lambda secara langsung, kita bisa menulis
Tapi kita tidak bisa memunculkan ekspresi lambda seolah-olah itu metode.
sumber
tentang Kode yang setara dengan kata kunci 'biarkan' dalam panggilan metode ekstensi LINQ berantai
komentar di atas tidak lagi valid
menghasilkan
jadi banyak
let
yang dioptimalkan sekarangsumber