2011-02-14 20 views
12

¿Es posible enviar un número variable de argumentos a un método?¿Cómo escribo un método de C# que toma una cantidad variable de argumentos?

Por ejemplo, si quiero escribir un método que concatenaría muchos objetos string[] en una cadena, pero quería que fuera capaz de aceptar argumentos sin saber cuántos me gustaría transferir, ¿cómo podría hacerlo?

+0

¿Por qué no pasaría un IEnumerable? – JohnOpincar

+0

Esa estructura de datos infinita tardará un tiempo en iterar ... – Kurru

+0

El título probablemente debería decir variable en lugar de infinito. – JohnOpincar

Respuesta

19

podría hacer esto como:

string ConcatString(params string[] arguments) 
{ 
    // Do work here 
} 

Esto puede ser llamado como:

string result = ConcatString("Foo", "Bar", "Baz"); 

Para detalles, vea params (C# Reference).


FYI - Hay ya un String.Concat(params object[] args) es - concatenará cualquier conjunto de objetos llamando ToString() en cada uno. Entonces, para este ejemplo específico, probablemente esto no sea tan útil.

5

Use the params keyword de hacer eso:

public static string ConvertToOneString(params string[] list) 
{ 

    string result = String.Empty; 
    for (int i = 0 ; i < list.Length ; i++) 
    { 
     result += list[i]; 
    } 
    return result; 
} 

Uso:

string s = "hello" 
string a = "world" 
string result = ConvertToOneString(s, a); 
2

sí, se puede utilizar para params que

2

Uso params:

void YourMethod(params string[] infiniteArgs) { } 
3

muy fácil de hacer por medio de params palabra clave

void ConcatString(params String[] strArray) 
{ 
    foreach (String s in strArray) 
    { 
     // do whatever you want with all the arguments here... 
    } 
} 
4

Usted puede crear fácilmente un método que toma un número arbitrario de argumentos (incluyendo el cero), utilizando el params palabra clave:

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

Usted incluso puede pasar una matriz a este método en lugar de una lista de parámetros, y el método funcionará exactamente igual.

2
string MyConcat(params string[] values) 
{ 
    var s = new StringBuilder(); 
    foreach (var v in values) 
     s.Append(v); 
    return s.ToString(); 
} 
Cuestiones relacionadas