72 Stimmen

Überprüfen, ob eine Variable in einer Ad-hoc-Liste von Werten enthalten ist

Gibt es eine kürzere Möglichkeit, etwas wie dies zu schreiben:

if(x==1 || x==2 || x==3) // do something

Was ich suche, ist etwas wie dies:

if(x.in((1,2,3)) // do something

75voto

Ilya Ivanov Punkte 22708

Sie könnten dies erreichen, indem Sie die List.Contains Methode verwenden:

if(new []{1, 2, 3}.Contains(x))
{
    // x ist entweder 1 oder 2 oder 3
}

41voto

Austin Salonen Punkte 47404
public static bool In(this T x, params T[] set)
{
    return set.Contains(x);
}

...

if (x.In(1, 2, 3)) 
{ ... }

Erforderliche Lektüre: MSDN Erweiterungsmethoden

14voto

It'sNotALie. Punkte 21449

Wenn es sich in einem IEnumerable befindet, verwenden Sie dies:

if (enumerable.Any(n => n == value)) //whatever

Andernfalls, hier ist eine kurze Erweiterungsmethode:

public static bool In(this T value, params T[] input)
{
    return input.Any(n => object.Equals(n, value));
} 

Fügen Sie es in einer static class hinzu und Sie können es wie folgt verwenden:

if (x.In(1,2,3)) //whatever

2voto

RacerNerd Punkte 1571
int x = 1;
if((new List {1, 2, 3}).Contains(x))
{
}

1voto

J. Gofy Punkte 11

Ab C#9 unterstützt die Sprache ein Muster dafür:

if(x==1 || x==2 || x==3) foo();

kann geschrieben werden als:

if (x is (1 or 2 or 3)) foo();

Diese Muster können ziemlich komplex sein. Eine Beschreibung für diesen Fall habe ich hier gefunden: https://learn.microsoft.com/en-US/dotnet/csharp/language-reference/operators/patterns#precedence-and-order-of-checking

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X