首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ParameterInfo.DefaultValue与ParameterInfo.RawDefaultValue的区别

ParameterInfo.DefaultValue与ParameterInfo.RawDefaultValue的区别
EN

Stack Overflow用户
提问于 2013-04-24 07:22:03
回答 1查看 1.7K关注 0票数 15

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

来自文档,DefaultValue

获取一个值,如果参数具有默认值,则该值指示默认值。 此属性仅在执行上下文中使用。在只反射的上下文中,使用RawDefaultValue属性。 当方法调用中未指定实际值时,将使用默认值。参数的默认值为null。这与未定义默认值的情况不同。

来自文档,RawDefaultValue

获取一个值,如果参数具有默认值,则该值指示默认值。 此属性既可用于执行上下文,也可用于仅反射上下文。 当方法调用中未指定实际值时,将使用默认值。参数的默认值为null。这与未定义默认值的情况不同。

这些文档非常相似,只是其中一个用于反射上下文,而另一个则不是。这有什么区别?什么时候没有反射的情况下使用DefaultValue?我的意思是,我们如何在没有反射的情况下得到默认值?我是不是遗漏了什么?

更新

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

代码语言:javascript
运行
复制
public void Required(string value)
{

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

}

我用以下方法测试:

代码语言:javascript
运行
复制
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!

那么,如果我的测试显示(在反射上下文中)没有任何不同,那么有什么区别呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-24 07:45:30

“反思语境”与“仅反思语境”之间存在着微妙但显著的差异。“仅反映上下文”指的是非常具体的内容:

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

这是一种只加载程序集以供检查的方法,它有一个明显的优点,即不需要加载任何依赖程序集,甚至不要求其存在。

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

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16185826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档