c# documentation - هل هناك فرق بين إرجاع myVar مقابل العودة (myVar)؟




2 Answers

حدث: كان هذا السؤال موضوع مدونتي في 12 نيسان 2010 . شكرا على السؤال مسلية!

في الواقع ، لا يوجد فرق.

نظريا يمكن أن يكون هناك فرق. هناك ثلاث نقاط مثيرة للاهتمام في مواصفات C # حيث يمكن أن يحدث هذا فرقًا.

أولا ، تحويل وظائف مجهولة لتفويض أنواع وأشجار التعبير. خذ بعين الاعتبار ما يلي:

Func<int> F1() { return ()=>1; }
Func<int> F2() { return (()=>1); }

F1 قانوني بشكل واضح. هل F2 ؟ من الناحية الفنية ، لا. توضح المواصفات في القسم 6.5 وجود تحويل من تعبير lambda إلى نوع مفوض متوافق. هل هذا تعبير لامدا ؟ لا ، إنه تعبير مقسم يحتوي على تعبير لامدا .

المحول البرمجي Visual C # يجعل انتهاك spec صغيرة هنا ويتجاهل الأقواس لك.

ثانيا:

int M() { return 1; }
Func<int> F3() { return M; }
Func<int> F4() { return (M); }

F3 قانوني. هل F4 ؟ لا. ينص البند 7.5.3 على أنه لا يجوز أن يحتوي التعبير المحوسب على مجموعة أسلوب. مرة أخرى ، من أجل راحتك ، نحن نخرق المواصفات ونسمح بالتحويل.

الثالث:

enum E { None }
E F5() { return 0; }
E F6() { return (0); }

F5 قانوني. هل F6 ؟ لا. توضح المواصفات أن هناك تحويل من الصفر الحرفي إلى أي نوع تعداد. " (0) " ليس هو الصفر الحرفي ، بل هو قوس يتبعه الصفر الحرفي ، متبوعًا بقوس. إننا نخرق المواصفات هنا ونسمح في الواقع بأي تعبير ثابت لوقت الترجمة يساوي الصفر ، وليس مجرد حرف حرفي.

لذلك في كل حالة ، نسمح لك بالابتعاد عنها ، حتى وإن كان ذلك من الناحية الفنية غير قانوني.

tags summary

كنت أبحث في بعض الأمثلة على كود C # ، ولاحظت أن أحد الأمثلة كان يلف العائد في ().

لقد فعلت دائما للتو:

return myRV;

هل هناك فرق يفعل:

return (myRV);



لا ، لا يوجد اختلاف بخلاف بنائي.




Related

c# syntax

Tags

c#   syntax