Estoy teniendo dificultades para encontrar lo que, creo, debería ser un método bastante simple.C# In() método? (como Sql)
Creo que todos hemos utilizado la siguiente:
select someThing from someTable where someColumn in('item1', 'item2')
En C#, he tiene que escribir cosas como esta:
if (someEnum == someEnum.Enum1 || someEnum == someEnum.Enum2 ||
someEnum == someEnum.Enum3)
{
this.DoSomething();
}
Esto funciona, pero es sólo prolijo.
Por frustración, escribí un método de extensión para lograr lo que estoy tratando de hacer.
namespace System
{
public static class SystemExtensions
{
public static bool In<T>(this T needle, params T[] haystack)
{
return haystack.Contains(needle);
}
}
}
Ahora, puedo escribir código más corto:
if (someEnum.In(someEnum.Enum1, someEnum.Enum2, someEnum.Enum3))
this.DoSomething();
if (someInt.In(CONSTANT1, CONSTANT2))
this.DoSomethingElse();
Se siente sucio, sin embargo, para escribir mi propio método para algo que simplemente no puedo encontrar en el marco.
cualquier ayuda que la gente puede ofrecer sería grande, Gracias
EDIT: Gracias a todos por el anaylsis en profundidad. Creo que seguiré usando mi método In().
No hay nada en el marco específicamente para hacer esto, por lo que su enfoque parece sólido. también podrías hacer [] {algúnEnum.Enum1, SomeEnum.Enum2} .Contains (someEnum} nuevo si no quieres el método de extensión. Sin embargo, el método de extensión lo hace leer mejor. – btlog
Generalmente uso 'Contiene()' método de extensión para * In * consultas. De hecho, 'Contains()' se traduce a 'in' en consultas de Linq-to-SQL.Me gusta el método de extensión 'In()', ya que proporciona una envoltura sintáctica agradable para 'Contains()' para usar cuando aún no tengo los valores en un contenedor enumerable. – kbrimington
Parece que ya entendiste por qué los métodos de extensión están allí en primer lugar. Me gusta la limpieza de tu enfoque. –