如何知道方法参数是否为可空类型
How to know if method argument is a nullable type
我有一个方法接收 string
和 object
的字典
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()
并且它的值在字典中具有空值,那么您将出现空异常。
我有一个方法接收 string
和 object
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>
.
所以不,你无法判断 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()
并且它的值在字典中具有空值,那么您将出现空异常。