2009-09-03 11 views
6

Ho questa funzione:Qualcosa di simile all'istruzione SQL in .NET framework?

public bool IsValidProduct(int productTypeId) 
    { 
     bool isValid = false; 

     if (productTypeId == 10 || 
      productTypeId == 11 || 
      productTypeId == 12) 
     { 
      isValid = true; 
     } 

     return isValid; 
    } 

ma mi chiedo se c'è un modo più semplice per scriverlo, come ad esempio:

public bool IsValidProduct(int productTypeId) 
    { 
     bool isValid = false; 

     if (productTypeId.In(10,11,12)) 
     { 
      isValid = true; 
     } 

     return isValid; 
    } 

So che potrei scrivere un metodo di estensione per gestire questa situazione, Sono solo curioso di sapere se c'è già qualcosa là fuori o se c'è un modo migliore per scriverlo.

risposta

5

No, non ci credo, ma potresti scrivere un metodo di estensione come tale che permetta al tuo codice di funzionare esattamente come scritto.

public static bool In<T>(this T source, params T[] args) { 
    return args.Contains(source); 
} 

L'array in testa è un po 'troppo. Probabilmente vorrai aggiungere casi speciali per un numero fisso di parametri più piccolo.

+0

desiderio questo era già in linq, ma questo aiuta a rendere il codice bello e conciso – Nick

11
new [] {10, 11, 12}.Contains(productTypeId) 
0

È possibile utilizzare il metodo di estensione Contiene da .NET 3.5. Funziona su tutti i tipi enumerabili:

if (new [] { 10, 11, 12 }.Contains(productTypeId)) 
{ 
    ... 
} 
1

Non credo che ci sia qualcosa nel quadro quindi dovrete scrivere il proprio metodo di estensione. Il più vicino si può ottenere con LINQ è qualcosa di simile:


if(new[] { 10, 11, 12 }.Contains(productTypeId)) { ... } 
3

Hmm, si potrebbe fare questo:

public bool IsValidProduct(int productTypeId) 
{ 
    bool isValid = false; 

    if (new[] {10,11,12}.Contains(productTypeId)) 
    { 
     isValid = true; 
    } 

    return isValid; 
} 

o se si desidera la stessa cosa più corta:

public bool IsValidProduct(int productTypeId) 
{ 
    return (new[] {10,11,12}.Contains(productTypeId)); 
} 
2

si potrebbe fare qualcosa sulla falsariga di:

new int[] { 10,11,12 }.Contains(productTypeID); 

o andare ulteriormente un creare un'estensione per int lungo le linee di:

public static bool In(this int i, params int[] ints) 
{ 
    return ints.Contains(i); 
} 

Con un utilizzo di:

if (productTypeID.In(10,11,12)) { ... } 

Non direi che sono i più efficienti, ma possibile sì.

0

var validIds = new [] {10, 11, 12};
validIds.Contains (productId);

0

Questo funzionerebbe se i numeri desiderati sono tutti in un intervallo, non completamente in funzione "IN", ma potrebbe essere utile.

if (Enumerable.Range(10, 3).Contains(productTypeId)) 
Problemi correlati