La locura ADO.NET y tipos anulables
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.
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);
}