反射:如何获取 by-ref 类型的基础类型

发布于 2024-09-05 16:38:35 字数 454 浏览 4 评论 0原文

我很惊讶地发现“ref”和“out”参数没有用特殊属性标记,尽管存在 ParameterInfo.IsOut、ParameterInfo.IsIn(据我所知,这两个参数始终为 false)、ParameterAttributes。输入和参数属性.输出。相反,“ref”参数实际上由一种特殊类型的“Type”对象表示,而“out”参数只是带有附加属性(我还不知道哪种属性)的 ref 参数。

不管怎样,要创建一个 by-ref 参数,你可以调用 Type.MakeByRefType(),但我的问题是,如果你已经有一个 by-ref 类型,你如何回到原来的 Type?

提示:它不是 UnderlyingSystemType:

Type t = typeof(int);
Console.WriteLine(t.MakeByRefType().UnderlyingSystemType==t); // FALSE

I was surprised to learn that "ref" and "out" parameters are not marked by a special attribute, despite the existence of ParameterInfo.IsOut, ParameterInfo.IsIn (both of which are always false as far as I can see), ParameterAttributes.In and ParameterAttributes.Out. Instead, "ref" parameters are actually represented by a special kind of "Type" object and "out" parameters are just ref parameters with an additional attribute (what kind of attribute I don't yet know).

Anyway, to make a by-ref argument you call Type.MakeByRefType(), but my question is, if you already have a by-ref type, how do you get back to the original Type?

Hint: it's not UnderlyingSystemType:

Type t = typeof(int);
Console.WriteLine(t.MakeByRefType().UnderlyingSystemType==t); // FALSE

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文