كيف NerdDinner سبيل المثال العشاء.GetRuleViolations وظيفة عودة قائمة ؟

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

سؤال

من ما قرأت,

yield return <value> 

يقفز من وظيفة هذه اللحظة الخط يتم تنفيذها.غير أن سكوت غوثري نص يشير إلى أن

var errors = dinner.GetRuleViolations();

بنجاح تسحب قائمة بجميع القاعدة الانتهاكات على الرغم من GetRuleViolations هي قائمة طويلة من

if(String.someFunction(text))
    yield return new RuleViolation("Scary message");
if(String.anotherFunction(text))
    yield return new RuleViolation("Another scary message");

كيف يعمل هذا ؟

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

المحلول

وأنها لا ترجع القائمة. تقوم بإرجاع IEnumerable<RuleViolation>. yield return بإرجاع قيمة في طريقة مكرر . مكرر هو وسيلة سهلة لتوليد سلسلة من العناصر في الأسلوب.

نصائح أخرى

الغلة (C # المرجعية)

<اقتباس فقرة>   

والكلمة العائد تستخدم ما يعرف   تقييم كسول. ماذا يعني هذا   عمليا هو أن أي شيء التالية   "عودة العائد" لن يتم تقييمها   حتى يتم طلبها من قبل   العداد.

ويكون أيضا نظرة على بلوق اريك ليبرت على مكرر كتل.
الجزء 1 <ر > <وأ href = "http://blogs.msdn.com/ericlippert/archive/2009/07/13/iterator-blocks-part-two-why-no-ref-or-out-parameters.aspx" يختلط = " نوفولو noreferrer "> الجزء 2 - لماذا لا المرجع أو خارج معلمات
<وأ href = "http://blogs.msdn.com/ericlippert/archive/2009/07/16/iterator-blocks-part-three-why-no-yield-in-finally.aspx" يختلط = "نوفولو noreferrer "> الجزء 3 - لماذا لا الغلة في نهاية المطاف
<وأ href = "http://blogs.msdn.com/ericlippert/archive/2009/07/16/iterator-blocks-part-three-why-no-yield-in-finally.aspx" يختلط = "نوفولو noreferrer "> الجزء 4 - لماذا لا الغلة في الصيد
الجزء 5 - دفع مقابل سحب
الجزء 6 - لماذا لم رمز غير آمنة

أنه يعمل لأن yield return إرجاع القيمة إلى كائن عداد أساسا أتمتة بعض السباكة رمز لك (أيإنه النحوية السكر).أنه لا يسبب طريقة للعودة سيكون yield break.

مزيد من المعلومات:

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