2010-03-01 10 views
9

Was das Äquivalent in C# für Delphi in der Syntax, wie ist:C# -Äquivalent für Delphi in


    if (iIntVar in [2,96]) then 
    begin 
    //some code 
    end; 
 

Dank

+1

Es gibt eine ähnliche Frage zirkulierende hier http://stackoverflow.com/questions/2356949/comparing-a-variable-to-multiple-values/2357002#2357002 – Mark

+1

Ähnlich, aber nicht nah genug für eine enge Stimme, IMO. – Randolpho

+0

Nein, nein. Die ähnliche Frage ist diese: http://stackoverflow.com/questions/2310617/how-would-i-convert-this-delphi-set-code-to-c –

Antwort

7

Ich ziehe es eine Methode, wie hier definiert schreiben: Comparing a variable to multiple values

Hier ist die Umwandlung von Tschads Post:

public static bool In(this T obj, params T[] arr) 
{ 
    return arr.Contains(obj); 
} 

Und Nutzung wäre

if (intVar.In(12, 42, 46, 74)) 
{ 
    //TODO: Something 
} 

oder

if (42.In(x, y, z)) 
    // do something 
+0

Sehr interessante Option. +1. – Randolpho

4

Es gibt keine solche gleichwertig. Am nächsten liegt die Erweiterungsmethode Contains() einer Sammlung.

Beispiel:

var vals = new int[] {2, 96}; 
if(vals.Contains(iIntVar)) 
{ 
    // some code 
} 
+1

'Es gibt keine solche Entsprechung '. Ist 'Enthält' nicht das gleiche wie' in', da beide einfach prüfen, ob der Wert im Array ist? – James

+0

Enthält nur Prüfungen für diese Werte nicht zwischen ihnen http://www.delphibasics.co.uk/RTL.asp?Name=In –

+1

Vielen Dank für Ihre Zeit und Antwort! – Pascal

4

In .Net, ist .Contains in der Nähe, aber die Syntax ist das Gegenteil von dem, was Sie geschrieben haben.

Sie könnten eine Erweiterungsmethode zu können, schreiben würde eine .In Methode

public static bool In<T>(this T obj, IEnumerable<T> arr) 
{ 
    return arr.Contains(obj); 
} 

Und Nutzung

if (42.In(new[] { 12, 42, 46, 74 })) 
{ 
    //TODO: Something 
} 
+6

mit einem params-Array macht die Syntax ein wenig schöner. 42. In (12, 42, 46, 74); – Mark

+0

Danke für deine Zeit und antworte! – Pascal

+0

@Mark, +1, in der Tat würde es, obwohl dann wiederum, es hängt davon ab, ob Ihr Array bereits in einer Variablen ist oder nicht bereits. IMHO sollte es sein, wie eine Liste von magischen Zahlen ist ein Code-Geruch. In diesem Fall können Sie mit IEnumerable ein Array oder List übergeben. – CaffGeek

2

Sie können diese Erweiterung Methode erstellen erstellen:

public static class ExtensionMethods 
{ 
    public static bool InRange(this int val, int lower, int upper) 
    { 
     return val >= lower && val <= upper; 
    } 
} 

dann können Sie dies tun:

int i = 56; 
if (i.InRange(2, 96)) { /* ... */ } 
1

Sie könnten eine Erweiterungsmethode

public static bool In(this int value, int[] range) 
    { 
     return (value >= range[0] && value <= range[1]); 
    } 
1

auf zu erweitern, was Mason Wheeler in einem Kommentar schrieb, würde dies <T> .Contains (unter .NET 3.5) Hashset werden.

int i = 96; 
var set = new HashSet<int> { 2, 96 }; 

if (set.Contains(i)) 
{ 
    Console.WriteLine("Found!"); 
}