Pregunta

He parece que han bajado un agujero de conejo. Me gustaría convertir los datos de ADO .NET conjuntos de datos en un tipo anulable. Al principio supuse que un elenco recta (int?) Lo haría. Qué ingenuo era yo. Mal, muy mal. Ahora estoy tratando de escribir un conversor genérico pero estoy quedarse atascado en la sintaxis. Esto es tan 2005 - alguien debe haber resuelto este problema ya. ¿Verdad?

El cuelgue es que cuando trato de usar un tipo anulable como en la restricción en el convertidor consigo un error de sintaxis:

public class NullableDBConversion
{
  public static T Convert<T>(object testValue) where T : Nullable<T>
  {
    if (testValue is DBNull)
    {
      return new Nullable<T>();
    }

    return new Nullable<T>((T)testValue);
  }
}

El objetivo tiene un único método que utiliza los genéricos para hacer todas las conversiones. ¿Es esto posible o tengo que escribir varias.

¿Fue útil?

Solución

T : Nullable<T> no tiene mucho sentido como una restricción - piensa en lo T tendría que ser; no puede ser anulable por sí misma. Usted podría tener:

where T : Nullable<U> where U : struct

pero eso sería algo oscura. Creo que es más fácil hacer Nullable<T> el tipo no anulable y sólo se refieren a <=>. Creo que quieres esto:

public static Nullable<T> Convert<T>(object testValue) where T : struct
{
    return testValue is DBNull ? null : new Nullable<T>((T)testValue);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top