ParameterInfo的区别.DefaultValue和ParameterInfo.RawDefaultValue



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

从文档中,DefaultValue:

获取一个值,该值指示参数具有默认值。

此属性仅在执行上下文中使用。在

请使用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!

那么,如果我的测试显示(所有在反射上下文中)根本没有区别,那么有什么区别呢?

在"in the context of reflection"one_answers"the reflect -only context"之间有一个微妙但重要的区别。"仅反射上下文"指的是非常具体的内容:

  • 如何:将程序集加载到仅反射上下文

这是一种仅为检查而加载程序集的方法,它具有不需要加载任何相关程序集甚至不需要存在的明显优点。

由于您似乎有意执行您正在反射的一些代码,因此仅反射上下文对您的使用将是有限的。

相关内容

  • 没有找到相关文章

最新更新