Tengo este trozo de código que se ha convertido desde VB.NET.

    private static void PrivateExecuteNonQuery(ref Providers enumProvider, ref string statement, ref CommandType commandType, ref ArrayList paramCollection, ref IDbConnection conn, ref Int16 CommandTimeout)
    {
        ExecuteSqlServerNonQuery(ref statement, ref commandType, ref paramCollection, ref (SqlConnection)conn, ref CommandTimeout);
    }

Estoy recibiendo un error, porque es como decir la ref (SqlConnection)conn no está en la forma de una variable, así que supongo que no se puede pasar en el método de parámetros para un ref?

Por lo que esto parece como un hacky solución para mí, sin embargo:

    private static void PrivateExecuteNonQuery(ref Providers enumProvider, ref string statement, ref CommandType commandType, ref ArrayList paramCollection, ref IDbConnection conn, ref Int16 CommandTimeout)
    {
        SqlConnection sqlConnection = (SqlConnection)conn;

    ExecuteSqlServerNonQuery(ref statement, ref commandType, ref paramCollection, ref sqlConnection, ref CommandTimeout);
    }

Alguien sabe de una mejor manera de satisfacer esta ref o hacer este limpiador?

  • Acaba de deshacerse de todas las refs….usted no debe modificar cualquiera de los parámetros…
  • Hay una razón por la que incluso el uso de ref parámetros? Estoy viendo las luces de advertencia, para ser honesto.
  • No tiene el aspecto que puede pasar por ref y encasillado en el mismo tiempo. Voy a tener que ser en dos líneas, pero no se ve «chapucero» en absoluto.
  • Puede parecer «chapucero», pero eso es lo de VB está haciendo detrás de las escenas de todos modos.
  • En tu otra pregunta (ahora suprimido), y, de hecho, una pregunta de ayer, mostraron a la fuente de la versión de VB, y todos los parámetros fueron ByVal. El C# conversión es, por tanto, no es puro, como usted ha presentado ref. La pregunta es «¿por qué?» Fue intencional o, posiblemente, un malentendido?
InformationsquelleAutor PositiveGuy | 2011-06-15

1 Comentario

  1. 12

    La propósito de ref es realmente permitir que el método para modificar el contenido de una variable que se pasa por el llamador. Si usted tiene incidental ref parámetros, debido a la conversión de código de Visual Basic que se utiliza ByRef indiscriminadamente, entonces termina en esta situación.

    Usted tiene dos opciones:

    • Eliminar innecesarios ref parámetro de clasificación, tanto en la persona que llama y el destinatario, o
    • Uso real variables, las variables ficticias si usted tiene que, como argumentos para el método

    Así, la respuesta es, no, no hay mejor manera de hacerlo sin deshacerse de innecesario ref parámetro calificadores.

    Lo que no es necesario un ref parámetro de clasificación? Es uno de un parámetro que es en realidad, nunca asignado en cualquier lugar en el cuerpo del método. La mayoría de los parámetros no es necesario ser ref y los que lo hacen suelen ser bastante obvio a partir de la inspección de la lógica del método.

Dejar respuesta

Please enter your comment!
Please enter your name here