2011-08-29 22 views

回答

2

MemberInfo没有获得增值的手段,为MemberInfo可以参考的方法,属性或字段。它们中的每一个都有自己的类型,它们分别从MemberInfo继承,它们分别是MethodInfo,PropertyInfoFieldInfo。每种类型都有其自身从目标实例获得的值(我将使用一个名为instance变量引用实例中的问题)的方式:

TL;下面 DR版本:要检查值为空,只是这样做:

if (value == null) 
{ 
    ... 
} 

一旦你从调用上述适当的方法的价值,你可以使用用于比较目的。当Nullable<T>被装箱时,特殊规则适用;当“空”值为Nullable<T>时,则返回实际的空引用。当一个非空Nullable<T>被装箱时,底层值就是装箱的东西(换句话说,Nullable<T>的实例永远不会实际装箱)。这个例子可以使它更清晰一点:

int? foo = 10; 
int? bar = null; 
int baz = 10; 

object value; 

value = foo; // The integer 10 is boxed and placed on the heap 
value = bar; // Nothing is boxed and value is set to null 
value = baz; // The integer 10 is boxed and placed on the heap 

因为这些特殊的规则,你可以比较其对null,看它是否是一个空值,可以直接转换为基本类型(这将导致一个运行时异常,如果它为空或不是那种类型的),或者你可以做一个有条件的投回空类型,它会给你回你的空值:

if (value == null) 
{ 
    ... 
} 

int val = (int)value; 

int? val = value as int?; 
+0

+1以确保完整性 –

1

假设你MemberInfoPropertyInfo

PropertyInfo prop = ... 
object value = prop.GetValue(instance, null); 
if (value != null) 
{ 
    ... 
} 
相关问题