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

Rem*_*anu 2 .net c# reflection sqlclr

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

...
if (p.ParameterType == typeof(string))
{
   sql = "nvarchar(4000)";
}
...
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

Mar*_*ell 6

SqlBytes&out SqlBytes(和ref SqlBytes它发生的)完全相同.基本上,out并且ref通过引用以相同的方式实现,作为参考.如果您正在使用反射并且您当前有一个Type实例,则可以使用以下命令获取引用版本:

Type type = ...
Type byRefType = type.MakeByRefType();
Run Code Online (Sandbox Code Playgroud)

并且相当容易混淆,回到非副本版本:

Type origType = byRefType.GetElementType();
Run Code Online (Sandbox Code Playgroud)

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