Mit == statt Equals ist ein bisschen schneller, besteht keine Notwendigkeit, hier benötigt Aufzählungen und keine Funktionen Anrufe boxen ist Probe C# -Code und erzeugt MSIL für sie:
class Program
{
static void Main(string[] args)
{
var instance = MyEnum.First;
if (instance == MyEnum.First)
{
Console.WriteLine("== Called");
}
if (instance.Equals(MyEnum.First))
{
Console.WriteLine("Equals called");
}
}
}
enum MyEnum { First = 99, Second = 100}
MSIL:
IL_0000: nop
IL_0001: ldc.i4.s 99
IL_0003: stloc.0
IL_0004: ldloc.0
IL_0005: ldc.i4.s 99
IL_0007: ceq
IL_0009: ldc.i4.0
IL_000a: ceq
IL_000c: stloc.1
IL_000d: ldloc.1
IL_000e: brtrue.s IL_001d
IL_0010: nop
IL_0011: ldstr "== Called"
IL_0016: call void [mscorlib]System.Console::WriteLine(string)
IL_001b: nop
IL_001c: nop
IL_001d: ldloc.0
IL_001e: box ConsoleApplication1.MyEnum
IL_0023: ldc.i4.s 99
IL_0025: box ConsoleApplication1.MyEnum
IL_002a: callvirt instance bool [mscorlib]System.Object::Equals(object)
IL_002f: ldc.i4.0
IL_0030: ceq
IL_0032: stloc.1
IL_0033: ldloc.1
IL_0034: brtrue.s IL_0043
IL_0036: nop
IL_0037: ldstr "Equals called"
IL_003c: call void [mscorlib]System.Console::WriteLine(string)
IL_0041: nop
IL_0042: nop
IL_0043: ret
Wie Sie == erzeugt ceq Anweisung sehen, Equals Methode performes Boxen und callvirt
ich so das Gefühl, wahrscheinlich bevor beantwortet wurde, kann ich einfach nicht, wo finden:
Eine vollständige Liste der möglichen Aufzählungstypen sind hier zu finden. Wenn es beantwortet wurde, lass es mich wissen und ich werde diese Frage löschen – ToddBFisher
ziemlich * jede * Frage, die auf SO gestellt wurde hier schon einmal gefragt ... es sollte ein Abzeichen für eine wirklich einzigartige Frage sein. –
http://stackoverflow.com/questions/814878/c-sharp-difference-between-and-equals – jAC