ParameterInfo.DefaultValue和ParameterInfo.RawDefaul

2019-09-01 00:21发布

这是一个后续问题如何获取可选参数的默认值?

从文档,默认值 :

获取指示默认值,如果该参数有一个默认的值。

此属性仅用于执行上下文。 在只反射上下文中,使用RawDefaultValue属性。

当在方法调用未指定的实际值是默认值被使用。 参数可以有一个默认值是零。 这是从没有定义的默认值的情况下是不同的。

从文档,RawDefaultValue :

获取指示默认值,如果该参数有一个默认的值。

该属性可以在两个执行上下文和只反射上下文中使用。

当在方法调用未指定的实际值是默认值被使用。 参数可以有一个默认值是零。 这是从没有定义的默认值的情况下是不同的。

该文档是如此相似,除了一个用于反射上下文和其他不。 有什么区别是什么? 当曾经DefaultValue没有反映在所有使用? 我的意思是我们怎样才能不反射的默认值? 我缺少的东西吗?

更新

我创建了两个重载这样的:

public void Required(string value)
{

}
public void Optional(string value = "", int i = -1)
{

}

我测试了:

var f = requiredInfo.GetParameters().Select(p => p.DefaultValue).ToArray();
var g = requiredInfo.GetParameters().Select(p => p.RawDefaultValue).ToArray();

var h = optionalInfo.GetParameters().Select(p => p.DefaultValue).ToArray();
var i = optionalInfo.GetParameters().Select(p => p.RawDefaultValue).ToArray();

//f equals g and h equals i in every way!

那么,什么是差给出我的测试表明(全部反射上下文中)没有什么区别呢?

Answer 1:

有间“在反射的情况下”,“只反射上下文中的”微妙而显著差异和。 在“反思只有语境”指的是非常具体的事情:

  • 如何:加载程序集到的反思,只有上下文

它是加载仅检查一个组件的方法,并且具有不需要被加载任何依赖程序集或者甚至是存在的明显的优势。

既然你似乎有一些执行你反映的代码的每一个意图,只反射上下文将利用有限的给你。



文章来源: Difference between ParameterInfo.DefaultValue and ParameterInfo.RawDefaultValue