Pregunta

En Python, puedo hacer algo como esto:

List=[3, 4]

def Add(x, y):
    return x + y

Add(*List) #7

¿Hay alguna manera de hacer esto o algo similar en C #? Básicamente quiero ser capaz de pasar una lista de argumentos a una función arbitraria, y tiene que ser aplicados como parámetros de la función sin desempaquetar manualmente la lista y llamar a la función de especificar explícitamente los parámetros.

¿Fue útil?

Solución

Bueno, el más cercano sería la reflexión, pero esto es más bien lenta ... pero mira MethodInfo.Invoke ...

Otros consejos

Puede utilizar la palabra clave params la hora de definir el método y luego se puede poner directamente su lista (después de llamar ToArray) en su llamada al método.

public static void UseParams(params object[] list)
{
        for (int i = 0; i < list.Length; i++)
        {
            Console.Write(list[i] + " ");
        }
        Console.WriteLine();
}

... que se puede llamar más tarde con lo siguiente.

object[] myObjArray = { 2, 'b', "test", "again" };
UseParams(myObjArray);

Para referencia: http://msdn.microsoft.com/en-us /library/w5zay9db.aspx

no puedes, se pueden hacer cosas que están cerca con un poco de mano que saluda (ya sea el rendimiento a un foreach, o añadir un método de extensión foreach en la colección que lleva una lambda), pero nada tan elegante como se obtiene en Python .

Con LINQ se puede hacer esto que es bastante cerca de su ejemplo.

 var list = new List<int> { 3, 4 };
 var sum = list.Sum();
Func<List<float>, float> add = l => l[0] + l[1];
var list = new List<float> { 4f, 5f };
add(list); // 9

o

Func<List<float>, float> add = l => l.Sum();
var list = new List<float> { 4f, 5f };
add(list); // 9

es el más cercano que se obtiene en C # considerando que es de tipo estático. Usted puede mirar en concordancia con el modelo F # 's exactamente lo que está buscando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top