ما هو الجهاز وكيفية استخدام تعبيرات لامدا؟[ينسخ]

StackOverflow https://stackoverflow.com/questions/25376

  •  09-06-2019
  •  | 
  •  

سؤال

هذا السؤال لديه بالفعل إجابة هنا:

لقد قرأت أن تعبيرات Lambda هي إضافة قوية بشكل لا يصدق إلى C#، ومع ذلك أجد نفسي في حيرة من أمرها.كيف يمكنهم تحسين حياتي أو تحسين الكود الخاص بي؟هل يمكن لأي شخص أن يشير إلى مصدر جيد لتعلم مثل هذه التعبيرات؟

تبدو رائعة للغاية، ولكن كيف ترتبط بحياتي اليومية كمطور لـ asp.net؟

يحرر:شكرًا على الأمثلة، وشكرًا على الرابط الخاص بمقالات إريك وايت.ما زلت هضم تلك الآن.سؤال واحد سريع:هل تعبيرات لامدا مفيدة لأي شيء آخر غير الاستعلام؟كل مثال رأيته كان عبارة عن بناء استعلام.

هل كانت مفيدة؟

المحلول

:هي تعبيرات لامدا مفيدة لأي شيء آخر غير الاستعلام

تعبيرات لامبا ليست سوى طريقة ملائمة لكتابة دالة "سطرية".

لذا فهي مفيدة في أي مكان تريد فيه القليل من التعليمات البرمجية التي يمكن استدعاؤها كما لو كانت وظيفة منفصلة ولكنها مكتوبة بالفعل داخل المتصل بها.(بالإضافة إلى الاحتفاظ بالكود ذي الصلة في نفس الموقع في الملف، يتيح لك هذا أيضًا ممارسة ألعاب ممتعة ذات نطاق متغير - راجع "الإغلاقات" للحصول على مرجع.)

قد يكون أحد الأمثلة على الاستخدام غير المتعلق بالاستعلام لـ lamba جزءًا من التعليمات البرمجية التي تفعل شيئًا غير متزامن عندما تبدأ بـ ThreadPool.QueueUserWorkItem.النقطة المهمة هي أنه يمكنك أيضًا كتابة هذا باستخدام مندوبين مجهولين (والتي كانت مقدمة لـ C#2)، أو مجرد وظيفة عضو منفصلة في الفصل.

هذا http://blogs.msdn.com/jomo_fisher/archive/2005/09/13/464884.aspx هي مقدمة رائعة خطوة بخطوة لكل هذه الأشياء، والتي قد تساعدك.

نصائح أخرى

تقدم Lambdas البرمجة الوظيفية إلى C#.إنها وظائف مجهولة يمكن تمريرها كقيم إلى وظائف أخرى معينة.الأكثر استخدامًا في LINQ.

هنا مثال مفتعل:

List<int> myInts = GetAll();
IEnumerable<int> evenNumbers = myInts.Where(x => x % 2 == 0);

الآن عندما تقوم بالبحث من خلال الأرقام الزوجية لامدا

x=> x % 2 == 0

ثم يتم تطبيقه كمرشح على myInts.

لقد أصبحت مفيدة حقًا في زيادة إمكانية القراءة للخوارزميات المعقدة التي قد تحتوي على العديد من شروط وحلقات IF المتداخلة.

فيما يلي مثال بسيط لشيء رائع يمكنك القيام به باستخدام لامدا:

List<int> myList = new List<int>{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
myList.RemoveAll(x => x > 5);
//myList now == {1,2,3,4,5}

تأخذ طريقة RemoveAll مسندًا (مفوضًا يأخذ الوسائط ويعيد منطقيًا)، ويتم إزالة أي شيء يطابقه.إن استخدام تعبير لامدا يجعل الأمر أسهل من إعلان المسند فعليًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top