Quiero una función de ayuda de búsqueda tipada para una colección heterogénea: debe devolver una estructura o clase, de lo contrario nula si no se encuentra el elemento. A continuación se muestra un ejemplo con una búsqueda trivial de colecciones, pero podría ser una llamada a la base de datos o lo que sea.¿Cómo implementar el método de búsqueda de colecciones genéricas que puede devolver la clase o estructura anulable?
¿Hay alguna manera de lograr esto con una única firma de método?
public T GetClass<T>(string key) where T : class
{
object o;
if (Contents.TryGetValue(key, out o))
{
return o as T;
}
return null;
}
public T? GetStruct<T>(string key) where T : struct
{
object o;
if (Contents.TryGetValue(key, out o))
{
if (o is T)
{
return (T?) o;
}
}
return null;
}
lo que ya he intentado:
- entiendo que las restricciones genéricas no pueden ser utilizados para eliminar la ambigüedad sobrecargas. Entonces no puedo simplemente darles el mismo nombre a estos dos métodos.
- La devolución
(Default) T
no es una opción, ya que 0 es un valor int válido. - He intentado llamar con
<int ?>
como el tipo, pero como se discutió,Nullable<T>
no es un tipo de referencia.
¿Hay alguna manera de indicar que voy a devolver un int encuadrado?
que la mitad de este tipo - pero * permite * llamar a él como 'getClass' y devuelve 0 para " encontrado con valor 0 "y" no encontrado "indistinguiblemente. De hecho, podrías perder accidentalmente el segundo '?' En tu uso de muestra y obtener un error bastante sutil. ('result1' would * never * be null, pero es de esperar que lo sea) –
Creo que el valor predeterminado para int? es nulo – akatakritos
Pero, ¿qué pasa si el valor que está buscando es un int regular: creo que (o es int?) ¿fallará bc int? no es un int. – akatakritos