Operatorii is si as
Costul operatorilor as is is static void Main(string[] args) { object obj = new string('s', 1); IsDemo(obj); AsDemo(obj); ExplicitDemo(obj); } static void IsDemo(object str) { string local = null; if (str is string) { local = (string)str; } } .method private hidebysig static void IsDemo(object str) cil managed { // Code size 29 (0x1d) .maxstack 2 .locals init ([0] string local, [1] bool CS$4$0000) IL_0000: nop IL_0001: ldnull IL_0002: stloc.0 IL_0003: ldarg.0 -- parametrul este incarcat si se testeaze daca este de tip System.String IL_0004: isinst [mscorlib]System.String IL_0009: ldnull -- se incarca pe stiva rezultatul operatiei IL_0004 > IL_0009 (in acest caz e 1) IL_000a: cgt.un IL_000c: ldc.i4.0 IL_000d: ceq -- se calculeaza IL_000a == IL_000a (adica 1 == 0) si se pastreaza rezultatul in loc.1 IL_000f: stloc.1 IL_0010: ldloc.1 -- daca este ...