2013-10-16 5 views

Antwort

2

Nein, es gibt solche Operator in C# nicht. Sie müssen die Variable oder den Ausdruck zum Vergleich wiederholen.

ich weiß nicht, die offiziellen Grund, warum ein solcher Betreiber nicht in C# gibt es aber hier ein paar Gedanken:

  1. Keine andere Sprache (die ich kenne) hat man als solches ist es wahrscheinlich nicht all die nützliche
  2. All features starts with -100 points, und braucht eine gute Begründung, warum es über den Schwellenwert angehoben werden muss, um es tatsächlich zu implementieren, und wird auch rechtfertigen müssen, es vor oder anstelle von anderen Funktionen zu tun. Da es so einfach ist, den Ausdruck zu schreiben, bezweifle ich, dass er alle diese Kriterien erfüllt.

Sie konnte (obwohl ich glaube nicht, das ist eine gute Idee wäre) schaffen eine Erweiterungsmethode:

void Main() 
{ 
    int foo = 5; 
    if (foo.Between(1, 10)) 
     Debug.WriteLine("> 1 and < 10"); 
    else 
     Debug.WriteLine("?"); 
} 

public static class Extensions 
{ 
    public static bool Between<T>(this T value, T lowNotIncluded, T highNotIncluded) 
     where T : struct, IComparable<T> 
    { 
     return value.CompareTo(lowNotIncluded) > 0 && value.CompareTo(highNotIncluded) < 0; 
    } 
} 

Aber würde das nicht empfehlen. Eine Frage, die Sie stellen müssen, wenn Sie die Route der Erweiterungsmethode verwenden möchten, ist, wie Sie alle Kombinationen von >, >=, < und <= handhaben können.

+0

Keine Sprache hat so einen Operator? Der 68000 hat eine ** Anweisung **, das zu tun! ('CHK2'). – MSalters

+0

Und schau, was passiert ist :) Perl hat es, dazu bestimmt, auch nur eine historische Fußnote zu werden. –

+0

Was ist mit einem Parser und/oder lexikalischen Analysator eines Compilers? Ist diese Syntax besonders schwierig zu analysieren? – blt

2

Diese Art von Operator existiert in C# nicht. Aber ich würde es sowieso nicht verwenden, weil die Lesbarkeit und Intention deines Codes nicht sehr klar ist. Stattdessen würde ich eine Erweiterung Methode wie folgt verwenden:

// using extension method 
int number = 15; 
if (number.IsBetween(0, 12)) 
{ 
    ... 
} 

// definition of extension method 
public static bool IsBetween(this int num, int lower, int upper, bool inclusive = false) 
{ 
    return inclusive 
     ? lower <= num && num <= upper 
     : lower < num && num < upper; 
} 
Verwandte Themen