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
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
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
Sehr interessante Option. +1. – Randolpho
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
}
'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
Enthält nur Prüfungen für diese Werte nicht zwischen ihnen http://www.delphibasics.co.uk/RTL.asp?Name=In –
Vielen Dank für Ihre Zeit und Antwort! – Pascal
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
}
mit einem params-Array macht die Syntax ein wenig schöner. 42. In (12, 42, 46, 74); – Mark
Danke für deine Zeit und antworte! – Pascal
@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
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)) { /* ... */ }
Sie könnten eine Erweiterungsmethode
public static bool In(this int value, int[] range)
{
return (value >= range[0] && value <= range[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!");
}
Es gibt eine ähnliche Frage zirkulierende hier http://stackoverflow.com/questions/2356949/comparing-a-variable-to-multiple-values/2357002#2357002 – Mark
Ähnlich, aber nicht nah genug für eine enge Stimme, IMO. – Randolpho
Nein, nein. Die ähnliche Frage ist diese: http://stackoverflow.com/questions/2310617/how-would-i-convert-this-delphi-set-code-to-c –