Ich habe eine harte Zeit zu finden, was, denke ich, sollte eine ziemlich einfache Methode sein.C# In() Methode? (wie Sql)
Ich denke, wir haben alle benutzten:
select someThing from someTable where someColumn in('item1', 'item2')
In C#, ich habe Sachen wie diese schreiben:
if (someEnum == someEnum.Enum1 || someEnum == someEnum.Enum2 ||
someEnum == someEnum.Enum3)
{
this.DoSomething();
}
Dies funktioniert, aber es ist nur wortreich.
Aus Frustration habe ich eine Erweiterungsmethode geschrieben, um zu erreichen, was ich versuche zu tun.
namespace System
{
public static class SystemExtensions
{
public static bool In<T>(this T needle, params T[] haystack)
{
return haystack.Contains(needle);
}
}
}
Jetzt kann ich kürzeren Code schreiben:
if (someEnum.In(someEnum.Enum1, someEnum.Enum2, someEnum.Enum3))
this.DoSomething();
if (someInt.In(CONSTANT1, CONSTANT2))
this.DoSomethingElse();
Es fühlt sich schmutzig, aber auf meine eigene Methode für etwas zu schreiben, ich kann einfach nicht im Rahmen finden.
Jede Hilfe Sie Leute anbieten wäre toll, Dank
EDIT: Vielen Dank allen für die eingehende anaylsis. Ich denke, ich werde weiterhin meine In() -Methode verwenden.
Es gibt nichts im Framework, um dies zu tun, also scheint Ihr Ansatz solide. du könntest auch new [] {someEnum.Enum1, someEnum.Enum2} .Contains (someEnum} wenn du die extension-Methode nicht willst. Die extension-Methode macht es aber netter. – btlog
Ich benutze generell '' Contains() ' Erweiterungsmethode für * In * -Abfragen Tatsächlich wird 'Contains()' in Linq-zu-SQL-Abfragen in 'in' übersetzt.Ich mag Ihre 'In()' Erweiterung Methode, wie es eine schöne syntaktische Wrapper für 'Enthält()' zur Verwendung, wenn ich nicht bereits die Werte in einem aufzählbaren Container haben. – kbrimington
Es sieht so aus, als ob Sie ziemlich genau herausgefunden haben, warum Erweiterungsmethoden überhaupt vorhanden sind. Ich mag die Sauberkeit Ihres Ansatzes. –