سلام
با اجازۀ اساتید
در مورد سوال اولتون:
من برای مقایسۀ دو حالت ، دو تا کد نوشتم که فقط قسمت if اون ها با هم فرق داشت (یعنی همین دو نسخه ای که شما گفته بودید)
در حالت Debug اولین چیزی که در کد MSIL تولید شده توسط کامپایلر مشهود هست ، اندازۀ کده. نسخۀ اول کدتون ، بیشتر فضا اشغال می کنه.
نسخۀ اول:
IL_0037: stloc.s r
IL_0039: ldloc.s r
IL_003b: ldc.i4.1
IL_003c: beq.s IL_0041
IL_003e: ldc.i4.0
IL_003f: br.s IL_0042
IL_0041: ldc.i4.1
IL_0042: stloc.2
IL_0043: ldloc.0
IL_0044: ldc.i4.0
IL_0045: ceq
IL_0047: stloc.s CS$4$0000
IL_0049: ldloc.s CS$4$0000
IL_004b: brtrue.s IL_0072
IL_004d: nop
IL_004e: ldloc.1
IL_004f: ldc.i4.0
IL_0050: ceq
IL_0052: stloc.s CS$4$0000
IL_0054: ldloc.s CS$4$0000
IL_0056: brtrue.s IL_0071
IL_0058: nop
IL_0059: ldloc.2
IL_005a: ldc.i4.0
IL_005b: ceq
IL_005d: stloc.s CS$4$0000
IL_005f: ldloc.s CS$4$0000
IL_0061: brtrue.s IL_0070
نسخۀ دوم:
IL_0037: stloc.s r
IL_0039: ldloc.s r
IL_003b: ldc.i4.1
IL_003c: beq.s IL_0041
IL_003e: ldc.i4.0
IL_003f: br.s IL_0042
IL_0041: ldc.i4.1
IL_0042: stloc.2
IL_0043: ldloc.0
IL_0044: brfalse.s IL_004f
IL_0046: ldloc.1
IL_0047: brfalse.s IL_004f
IL_0049: ldloc.2
IL_004a: ldc.i4.0
IL_004b: ceq
IL_004d: br.s IL_0050
IL_004f: ldc.i4.1
IL_0050: stloc.s CS$4$0000
IL_0052: ldloc.s CS$4$0000
IL_0054: brtrue.s IL_0063
اما وقتی به صورت release پروژه رو build کردم ، هر دو حالت دقیقا یک کد خروجی رو تولید کردند .کامپایلر سی شارپ ، هر دو کد رو optimize کرده به صورت زیر:
IL_0036: stloc.s r
IL_0038: ldloc.s r
IL_003a: ldc.i4.1
IL_003b: beq.s IL_0040
IL_003d: ldc.i4.0
IL_003e: br.s IL_0041
IL_0040: ldc.i4.1
IL_0041: stloc.2
IL_0042: ldloc.0
IL_0043: brfalse.s IL_0055
IL_0045: ldloc.1
IL_0046: brfalse.s IL_0055
IL_0048: ldloc.2
IL_0049: brfalse.s IL_0055
سوال اول گزینه 2 سریعتر است
چون اگر مثلا گزینه 1 اشتباه باشد بقیه شرطها چک نمیشه
حالت دوم هم همینطوره. عملگر && در سی شارپ به صورت Short Circuit پیاده سازی شده ، مثل AndAlso در VB.NET ؛ پس در صورت false بودن اولین عملوند ، دیگه سراغ بقیه نمی ریم
(http://en.wikipedia.org/wiki/Short-circuit_evaluation
http://msdn2.microsoft.com/en-us/library/2a723cdk.aspx )
سوال دومتون رو متوجه نشدم .(با اعداد ثابت تست کردم ولی جواب نداد)