Pregunta

Según tengo entendido params es solo azúcar sintáctica que "debajo del capó" simplemente le da una matriz del tipo que especifica.

Primero, ¿cuándo usarías esto?

En segundo lugar, ¿por qué lo usarías en lugar de solo declarar un argumento de matriz?

¿Fue útil?

Solución

Math.Min toma exactamente dos argumentos. Esta es una estúpida limitación. Muchos otros idiomas le permiten escribir:

double x, y, z, w;
double least = min(x, y, z, w);

Si querías escribir un min función que podría usarse así, desea usar params.

Otros consejos

Un ejemplo obvio se puede encontrar en un método como String.Format(). Esta declaración utilizando params es fácil de seguir:

string.Format("Your name is {0}, {1}", lastName, firstName);

Pero sin parámetros es un poco más difícil:

string.Format("Your name is {0}, {1}", new string[] { lastName, firstName });

Me encuentro usando parámetros mucho para funciones de cadena como estas. Lo uso solo para mejorar la legibilidad del código.

Una forma en que lo usé es pasar consultas SQL a mi clase de envoltorio. Tendré un poco de SQL con un número variable de parámetros. De esta manera, puedo enumerar todos los parámetros que estoy enviando con la consulta en lugar de crear una matriz primero.

    SQLWrapper.Query(" some sql with parameters", new SqlParameter("@param1", val1),
                                                  new SqlParameter("@param1", val1),
                                                  new SqlParameter("@param1", val1));

Mucho más agradable que la alternativa:

Sqlwr

apper.Query(" some sql with parameters", new SqlParameter[]{new SqlParameter("@param1", val1),
                                                      new SqlParameter("@param1", val1),
                                                      new SqlParameter("@param1", val1)});

Es bueno tener cuando te encuentres con una situación en la que necesitas un número variable de argumentos.

Un ejemplo de la biblioteca de clases base es String.Split(params char[] separator), permitiéndole escribir, por ejemplo:

var segs = myString.Split(',',';',' ');

más bien que

var sets = myString.Split(new char[] {',', ';', ' '});

La razón principal que no es más privilegiada / más fácil de entender que me encuentro usando Params es en la ejecución de procedimientos almacenados.

Tome el caso donde tenga varios cientos de procedimientos almacenados en una base de datos. Entonces realmente solo tienes dos opciones

1: Escriba el código individualmente para cada procedimiento almacenado que tomaría meses

2: Cree un método de ejecutor genérico que ejecute cualquier procedimiento almacenado y tome cualquier número y tipo de parámetros, por ejemplo,

databaseHelper.ExecuteStoredProcedure(
                "myStoredProecdure",
                DbProviderHelper.StringParameter("@parameter_string", somestring),
                DbProviderHelper.BoolParameter("@parameter_string", somebool),
                DbProviderHelper.IntParameter("@parameter_int", someint));   
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top