反射:如何获取 by-ref 类型的基础类型
我很惊讶地发现“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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
调用
GetElementType()
。Call
GetElementType()
.