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
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
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
Opción muy interesante. +1. – Randolpho
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
}
'No existe tal equivalente'. ¿No es 'Contiene' lo mismo que 'in' ya que ambos simplemente verifican si el valor está en la matriz? – James
Contiene solo cheques para esos valores que no están entre ellos. Vea http://www.delphibasics.co.uk/RTL.asp?Name=In –
¡Gracias por su tiempo y respuesta! – Pascal
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
}
usando una matriz params hace que la sintaxis sea un poco más agradable. 42.In (12,42,46,74); – Mark
¡Gracias por su tiempo y respuesta! – Pascal
@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
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)) { /* ... */ }
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]);
}
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!");
}
Hay una pregunta similar que circula aquí http://stackoverflow.com/questions/2356949/comparing-a-variable-to-multiple-values/2357002#2357002 – Mark
similares, pero no lo suficientemente cerca para un primer voto, IMO. – Randolpho
No, no. La pregunta similar es esta: http://stackoverflow.com/questions/2310617/how-would-i-convert-this-delphi-set-code-to-c –