كيف NerdDinner سبيل المثال العشاء.GetRuleViolations وظيفة عودة قائمة ؟
-
05-07-2019 - |
سؤال
من ما قرأت,
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
بإرجاع قيمة في طريقة مكرر . مكرر هو وسيلة سهلة لتوليد سلسلة من العناصر في الأسلوب.
نصائح أخرى
والكلمة العائد تستخدم ما يعرف تقييم كسول. ماذا يعني هذا عمليا هو أن أي شيء التالية "عودة العائد" لن يتم تقييمها حتى يتم طلبها من قبل العداد.
اقتباس فقرة> ويكون أيضا نظرة على بلوق اريك ليبرت على مكرر كتل.
الجزء 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
.
مزيد من المعلومات: