[C#] Switch Case

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • maniak
  • Registratie: Augustus 2000
  • Laatst online: 20-08 20:32
Leuke vraag voor jullie.
Ik heb een klein voorbeeld gemaakt (zie hieronder). Maar nu de vraag, hoe compared die de string s met de case "a"? Is dit: s == "a" of is dit: s.compare("a")
Dus wat voert de case statement uit om de string s te vergelijken met de case "a"?


Voorbeeld:

string s = "a";
switch(s)
{
case "a":
// do iets
break;
default:
// do iets;
break;
}

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
==

Maar: nu de vraag: waarom boeit 't je? ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • maniak
  • Registratie: Augustus 2000
  • Laatst online: 20-08 20:32
Ik ben bezig met een prototype voor mijn onderzoek. Deze zoekt patronen in C# sources mbt een geselecteerde API. Door deze patronen te analyzeren en te vergelijken hoop ik anomalies te kunnen vinden in sources wat potienteel een bug kan zijn.

Ben nu bezig om switch statements te verwerken, maar kon niet goed vinden hoe een switch statement daadwerkelijk 2 objecten vergelijkt.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Staat toch écht in de language spec ;)
8.7.2 The switch statement
...
Like the string equality operators (§7.10.7), the switch statement is case sensitive and will execute a given switch section only if the switch expression string exactly matches a case label constant.
7.10.7 String equality operators
The predefined string equality operators are:

bool operator ==(string x, string y);
bool operator !=(string x, string y);
Hoewel 't een beetje in 't midden gelaten wordt of er daadwerkelijk een equality operator gebruikt wordt. Dat moet met 't bekijken van de MSIL wel te verifiëren zijn lijkt me.

Ik zou ook even String.Compare() != String.Equals() lezen btw ;)

[ Voor 16% gewijzigd door RobIII op 21-05-2013 11:28 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • maniak
  • Registratie: Augustus 2000
  • Laatst online: 20-08 20:32
Zoekende het Internet vond ik al dat het "==" moet zijn maar vond ook: http://blogs.msdn.com/b/brada/archive/2003/08/14/50227.aspx.

Ik wil graag een onafhankelijk antwoord voordat ik mijn eigen gevonden antwoorden ga gebruiken :)

Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
== is gewoon een operator overload van de equals functie. Het enige zinnige antwoord is dat je zou moeten kijken wat er kwa msil uit komt aan de achterkant. Switch statements worden normaal omgezet in jump tables. Voor strings is dit niet zondermeer mogelijk, bij kleine aantallen worden er dus (de MSIL equivalent van) IFs van gemaakt, bij meer opties wordt er een hastable lookup van gemaakt omdat dat sneller is.

Het antwoord is dus: geen van beiden. Dit is overigens info die gewoon op internet te vinden is.

Daarnaast: als het je gaat om fouten in de .Net source: dit is geen API onderdeel, het is een onderdeel van de taal en wordt door de compiler afgehandeld.

[ Voor 15% gewijzigd door Hydra op 21-05-2013 16:43 ]

https://niels.nu


Acties:
  • 0 Henk 'm!

  • Spiral
  • Registratie: December 2005
  • Niet online
Bart de Smet Unplugged heeft het over de Switch gehad tijdens een Techdays sessie. Wellicht heb je daar wat aan.
Zie http://channel9.msdn.com/Events/TechDays/Belgium-2013/58. Volgens mij komt het de laatste 8 minuten aan bod.

[ Voor 4% gewijzigd door Spiral op 22-05-2013 10:30 ]

To say of what is that it is not, or of what is not that it is, is false, while to say of what is that it is, and of what is not that it is not, is true. | Aristoteles

Pagina: 1