Type.Missing
https://msdn.microsoft.com/en-us/library/system.type.missing(v=vs.110).aspx
Missing.Value
https://msdn.microsoft.com/en-us/library/system.reflection.missing.value(v=vs.110).aspx
http://www.cnblogs.com/fang8206/archive/2011/04/21/2023327.html
表示 type 信息中的缺少值。字段为只读。
使用 Missing 字段通过反射进行调用,以获取参数的默认值。如果传入一个参数值的 Missing 字段,并且该参数没有默认值,则引发异常。
Type.Missing定义为:
public static readonly object Missing;
Type类的构造函数中为此字段进行了初始化,代码为:
Type.Missing = Missing.Value;
static Type() { Missing = Missing.Value; Delimiter = '.'; EmptyTypes = new Type[0]; __Filters filters = new __Filters(); FilterAttribute = new MemberFilter(filters.FilterAttribute); FilterName = new MemberFilter(filters.FilterName); FilterNameIgnoreCase = new MemberFilter(filters.FilterIgnoreCase); }
System.Reflection.Missing类定义为:
public sealed class Missing
{
static Missing(){Missing.Value = new Missing();}
internal Missing();
public static readonly Missing Value;
}
static Missing() { Value = new Missing(); }
所以,他们两个等价,都是System.Reflection.Missing类型。
虽然Type.Missing定义为object,但是在Type类的静态构造函数中把System.Reflection.Missing.Value赋给了它,所以Type.Missing的类型也变成了System.Reflecton.Missing了.
你可以运行如下代码进行检测 :
MessageBox.Show(System.Reflection.Missing.Value.GetType().ToString()); MessageBox.Show(System.Type.Missing.GetType().ToString()); if (System.Reflection.Missing.Value.Equals(System.Type.Missing)) { MessageBox.Show("System.Reflection.Missing.Value和System.Type.Missing相等"); } else { MessageBox.Show("System.Reflection.Missing.Value和System.Type.Missing不相等"); }