2010-03-01 21 views
9
en

Cuál es el equivalente en C# para Delphi de la sintaxis, como:equivalente C# para Delphi de


    if (iIntVar in [2,96]) then 
    begin 
    //some code 
    end; 
 

Gracias

+1

Hay una pregunta similar que circula aquí http://stackoverflow.com/questions/2356949/comparing-a-variable-to-multiple-values/2357002#2357002 – Mark

+1

similares, pero no lo suficientemente cerca para un primer voto, IMO. – Randolpho

+0

No, no. La pregunta similar es esta: http://stackoverflow.com/questions/2310617/how-would-i-convert-this-delphi-set-code-to-c –

Respuesta

7

prefiero un método como se define aquí: Comparing a variable to multiple values

Aquí es la conversión del puesto de Chad:

public static bool In(this T obj, params T[] arr) 
{ 
    return arr.Contains(obj); 
} 

y su uso sería

if (intVar.In(12, 42, 46, 74)) 
{ 
    //TODO: Something 
} 

o

if (42.In(x, y, z)) 
    // do something 
+0

Opción muy interesante. +1. – Randolpho

4

No hay tal equivalente. El más cercano es el método de extensión Contains() de una colección.

Ejemplo:

var vals = new int[] {2, 96}; 
if(vals.Contains(iIntVar)) 
{ 
    // some code 
} 
+1

'No existe tal equivalente'. ¿No es 'Contiene' lo mismo que 'in' ya que ambos simplemente verifican si el valor está en la matriz? – James

+0

Contiene solo cheques para esos valores que no están entre ellos. Vea http://www.delphibasics.co.uk/RTL.asp?Name=In –

+1

¡Gracias por su tiempo y respuesta! – Pascal

4

En .Net, .Contains es el más cercano, pero la sintaxis es lo contrario de lo que ha escrito.

Se podría escribir un método de extensión para poder crear un método .En

public static bool In<T>(this T obj, IEnumerable<T> arr) 
{ 
    return arr.Contains(obj); 
} 

y su uso sería

if (42.In(new[] { 12, 42, 46, 74 })) 
{ 
    //TODO: Something 
} 
+6

usando una matriz params hace que la sintaxis sea un poco más agradable. 42.In (12,42,46,74); – Mark

+0

¡Gracias por su tiempo y respuesta! – Pascal

+0

@Mark, +1, de hecho lo haría, aunque de nuevo, depende si su matriz ya está en una variable o no. En mi humilde opinión, debería ser, ya que una lista de números mágicos es un olor a código. En ese caso, IEnumerable le permite pasar una matriz, Lista, etc. – CaffGeek

2

Puede crear este método de extensión:

public static class ExtensionMethods 
{ 
    public static bool InRange(this int val, int lower, int upper) 
    { 
     return val >= lower && val <= upper; 
    } 
} 

luego puede hacer esto:

int i = 56; 
if (i.InRange(2, 96)) { /* ... */ } 
1

Se puede escribir un método de extensión

public static bool In(this int value, int[] range) 
    { 
     return (value >= range[0] && value <= range[1]); 
    } 
1

de ampliar lo que Mason Wheeler escribió en un comentario, esto sería hashset <T> .Contains (menores de .NET 3.5).

int i = 96; 
var set = new HashSet<int> { 2, 96 }; 

if (set.Contains(i)) 
{ 
    Console.WriteLine("Found!"); 
} 
Cuestiones relacionadas