J'ai du mal à trouver ce qui, je pense, devrait être une méthode assez simple.C# In() méthode? (comme Sql)
Je pense que nous avons tous utilisé ceci:
select someThing from someTable where someColumn in('item1', 'item2')
En C#, j'ai dois écrire des trucs comme ça:
if (someEnum == someEnum.Enum1 || someEnum == someEnum.Enum2 ||
someEnum == someEnum.Enum3)
{
this.DoSomething();
}
Cela fonctionne, mais il est juste verbeux. Par frustration, j'ai écrit une méthode d'extension pour accomplir ce que j'essaie de faire.
namespace System
{
public static class SystemExtensions
{
public static bool In<T>(this T needle, params T[] haystack)
{
return haystack.Contains(needle);
}
}
}
Maintenant, je peux écrire un code plus court:
if (someEnum.In(someEnum.Enum1, someEnum.Enum2, someEnum.Enum3))
this.DoSomething();
if (someInt.In(CONSTANT1, CONSTANT2))
this.DoSomethingElse();
Il se sent sale, cependant, d'écrire ma propre méthode pour quelque chose que je ne peux pas trouver dans le cadre.
Toute aide que vous pouvez offrir des gens serait génial, Merci
EDIT: Merci à tous pour la anaylsis en profondeur. Je pense que je continuerai à utiliser ma méthode In().
Il n'y a rien dans le framework spécifiquement pour cela, donc votre approche semble solide. vous pouvez aussi faire new [] {someEnum.Enum1, someEnum.Enum2} .Contains (someEnum} si vous ne voulez pas la méthode d'extension.La méthode d'extension rend la lecture plus agréable quand même – btlog
J'utilise généralement le 'Contains()' méthode d'extension pour les requêtes * In * En fait, 'Contains()' se traduit par 'in' dans les requêtes Linq-to-SQL.J'aime votre méthode d'extension 'In()', car elle fournit un bon wrapper syntaxique pour 'Contains()' à utiliser quand je n'ai pas déjà les valeurs dans un conteneur énumérable. – kbrimington
Il semble que vous ayez compris pourquoi les méthodes d'extension sont là en premier lieu. J'aime la propreté de ton approche. –