在C#中,是否有一种方法可以在Ref参数类型和非Ref版本之间进行转换?

4
我正在查看一个方法的参数并提取类型。我得到了(例如)"System.String&",因为该参数是一个输出参数。我想知道这个参数是否是String类型 - 但似乎没有办法将String&转换为它的非引用对应项。
有人能指点我吗?
谢谢!

1
如果在一个方法上有一个 ref 参数,并且使用反射来检查参数类型,你会得到带有额外的&符号的类型名称,表示它是一个 ref 参数。 - Daniel Brückner
@Daniel - 谢谢,我以前不知道。 - djdd87
这是在RealProxy对象的Invoke方法内部。您可以在此处看到类似的内容: http://msdn.microsoft.com/en-us/library/system.reflection.parameterinfo.parametertype.aspx 但下面的答案才是我要找的! - Andrew Ducker
1个回答

10

Type.GetElementType

获取当前数组、指针或引用类型所包含或引用的对象的类型,如果当前类型不是数组、指针或按引用传递,或者表示泛型类型或泛型方法的定义中的类型参数,则返回null。

示例:

var stringRefType = typeof(string).MakeByRefType();
var stringType = stringRefType.GetElementType();
Console.WriteLine(stringType == typeof(string)); // True

2
你可以使用 IsByRef 属性来确定它是一个引用类型,而不是检查类型名称是否以 "&" 结尾,以完成你的回答。 - Lasse V. Karlsen
让我感到非常高兴的是,像这样的晦涩问题的答案实际上已经在这里得到了解答。SO 赢了! - MarkPflug

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接