Tengo un método que recibe un diccionario de string y object .
private void MyFunc(Dictionary<string, object> parameters) { }Tengo un caso de uso en el que necesito llamar al método con el objeto siendo un Guid anulable
Nullable<Guid> guid = Guid.NewGuid(); Dictionary<string, object> parameters = new Dictionary<string, object>(); parameters.Add("myGuid", guid); MyFunc(parameters);Cuando intento obtener el tipo de objeto, parece ser System.Guid
parameters["myGuid"].GetType()¿Cómo puedo saber si el objeto es anulable? ¿Estoy perdiendo anulable al enviar un objeto como argumento de método?
Cuando llamas a parameters.Add("myGuid", guid) estás encuadrando el valor de guid . Cuando encajona un Nullable<T> , el resultado es una referencia nula o una T encuadrada... ya no hay rastro de la nulabilidad. En otras palabras, no hay una representación de objeto de un Nullable<T> .
Entonces no, no puede decir que el tipo original de la variable guid era Nullable<Guid> .
Tenga en cuenta que no necesita un diccionario para demostrar eso. Esto muestra lo mismo:
Nullable<Guid> guid = Guid.NewGuid(); object boxed = guid; Type type = boxed.GetType(); // System.GuidDebe verificar si el elemento del diccionario es del mismo tipo Nullable<Guid> como se muestra a continuación.
if( parameters["myGuid"] is Nullable<Guid>){ } Si llama directamente a GetType() y el valor que tenía es un valor nulo en el diccionario, entonces tendría una excepción nula.