如何知道方法参数是否为可空类型

How to know if method argument is a nullable type

我有一个方法接收 stringobject

的字典
private void MyFunc(Dictionary<string, object> parameters)
{
}

我有一个用例,我需要调用对象为可为 null 的 Guid 的方法

Nullable<Guid> guid = Guid.NewGuid();
Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("myGuid", guid);
MyFunc(parameters);

当我尝试获取对象的类型时,它似乎是 System.Guid

parameters["myGuid"].GetType()

如何知道对象是否可为空?将对象作为方法参数发送时,我是否丢失了可空值?

当您调用 parameters.Add("myGuid", guid) 时,您正在装箱 guid 的值。当您装箱 Nullable<T> 时,结果要么是空引用,要么是装箱的 T... 不再有可空性的踪迹。换句话说,Nullable<T>.

没有 object 表示

所以不,你无法判断 guid 变量的原始类型是 Nullable<Guid>.

请注意,您不需要字典来证明这一点。这显示了同样的事情:

Nullable<Guid> guid = Guid.NewGuid();
object boxed = guid;
Type type = boxed.GetType(); // System.Guid

您必须检查字典项是否为相同类型 Nullable<Guid>,如下所示。

if( parameters["myGuid"] is Nullable<Guid>){

}

如果您直接调用 GetType() 并且它的值在字典中具有空值,那么您将出现空异常。