ParameterInfo.ParameterType是“SqlBytes&”,如何与typeof()进行比较

时间:2012-11-14 09:43:23

标签: c# .net reflection sqlclr

我正在编写一个自动SQLCLR部署工具,我正在使用反射来发现必须声明的过程和函数。所以我使用这样的代码来构建部署汇编方法所需的T-SQL:

...
if (p.ParameterType == typeof(string))
{
   sql = "nvarchar(4000)";
}
...

但是此方法包含在C#中声明为out SqlBytes bytes且ParameterType为SqlBytes&的参数。我无法使用typeof(SqlBytes&)进行比较,因为语法无效。所以我有点疑惑SqlBytes&类型究竟是什么,如果有办法为它生成typeof。我知道我可以求助于类型名称(即字符串)比较,这不是我的问题,我更好奇这是一个类型&,看起来像C ++引用类型,但我估计在使用.Net的+ 10年里,我从未注意到它们。

enter image description here

1 个答案:

答案 0 :(得分:6)

SqlBytes&out SqlBytes(以及ref SqlBytes完全相同)。基本上,outref实现相同,作为参考,通过引用。如果您正在使用反射并且当前有Type实例,则可以使用以下方法获取参考版本:

Type type = ...
Type byRefType = type.MakeByRefType();

而且令人困惑的是,回到非副本版本:

Type origType = byRefType.GetElementType();

(我怀疑他们可能只是将其破解成现有方法,坦率地说)