Type.Missing和System.Reflection.Missing.Value

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不相等");
}
复制代码

 

作者:Chuck Lu    GitHub    
posted @   ChuckLu  阅读(2595)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示