Hat die if () Syntax von C# keinen IN Operator wie Pascal oder SQL (IN, LIKE, BETWEEN)?

23/10/2007 - 15:02 von Rudi | Report spam
Hallo,

ich suche verzweifelt nach einer Syntax mit der ich folgende if()
Abfrage abbilden kann:

int i=5;
if (i in [1,3,5..10]) doSomething;

bzw. konkretes Beispiel:

enum TaskStates {Idle,Proc1,Proc2, ... ProcN}
static TaskStates taskState = TaskStates.Idle;

if (taskState in
[TaskStates.Idle,TaskStates.Proc1,TaskStates.Proc2,TaskStates.Proc5 [..]
TaskStates.Proc10]) doSomething;

Kann es tatsàchlich sein, dass es so ein Konstrukt in C# noch nicht
gibt? Alle Bücher und Onlinesuchen waren bisher keine Hilfe.

Ich will weder das schreiben

if ((taskState == TaskStates.Idle) || (taskState == TaskStates.Proc1) ||
((taskState >= TaskStates.Proc5) && (taskState <= TaskStates.Proc10))
doSomething;

noch sowas:

switch(taskState)
{
case TaskStates.Idle:
case TaskStates.Proc1:
case TaskStates.Proc2:
case TaskStates.Proc5:
case TaskStates.Proc6:
case TaskStates.Proc7:
case TaskStates.Proc8:
case TaskStates.Proc9:
case TaskStates.Proc10:
DoSomthing;
break;
}

Vielen Dank!
 

Lesen sie die antworten

#1 Martin Horst
23/10/2007 - 15:33 | Warnen spam
Hi,

Rudi schrieb:
Hallo,

ich suche verzweifelt nach einer Syntax mit der ich folgende if()
Abfrage abbilden kann:

int i=5;
if (i in [1,3,5..10]) doSomething;

bzw. konkretes Beispiel:

...




das gibt es nicht. In Pascal waren die Werte (IMHO) ja eh auf 255
begrenzt. Du kannst aber folgendes machen:

int i=5;
if ( Array.IndexOf<int>(new int[] { 1,3,5,6,7,8,9,10 }, i) >= 0 )
{
}

Du kannst daneben auch die Klasse BitArray verwenden oder du schreibt
dir ein eignes Objekt dafür. Aber Sets wie sie es in Pascal gibt, gibt
es werden in C, C++, Java noch C#.

Gruß
Martin

Ähnliche fragen