C# ParameterInfo.ParameterType为";SqlBytes&&引用;,如何与typeof()进行比较

C# ParameterInfo.ParameterType为";SqlBytes&&引用;,如何与typeof()进行比较,c#,.net,reflection,sqlclr,C#,.net,Reflection,Sqlclr,我正在编写一个自动SQLCLR部署工具,并使用反射来发现必须声明的过程和函数。因此,我使用这样的代码来构建部署组装方法所需的T-SQL: ... if (p.ParameterType == typeof(string)) { sql = "nvarchar(4000)"; } ... 但此方法包含一个在C中声明为out SqlBytes的参数,参数类型为SqlBytes&。我无法使用typeof(SqlBytes&)进行比较,因为它的语法无效。所以我有点困惑,究竟什么是SqlBytes

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

...
if (p.ParameterType == typeof(string))
{
   sql = "nvarchar(4000)";
}
...
但此方法包含一个在C中声明为
out SqlBytes
的参数,参数类型为
SqlBytes&
。我无法使用
typeof(SqlBytes&)
进行比较,因为它的语法无效。所以我有点困惑,究竟什么是
SqlBytes&
类型,以及是否有方法为它生成typeof。我知道我可以求助于类型名称(IE.string)比较,这不是我的问题,我更好奇什么是“代码>和代码>这类类型,看起来像C++引用类型,但是我认为在+NET中工作10年我从来没有注意到它们。
SqlBytes&
out SqlBytes
完全相同(而且
引用SqlBytes
)。基本上,
out
ref
作为引用,通过引用来实现。如果您使用的是反射,并且当前有一个
类型
实例,则可以使用以下方法获得“按引用”版本:

Type type = ...
Type byRefType = type.MakeByRefType();
更令人困惑的是,回到非按参考版本:

Type origType = byRefType.GetElementType();

(坦率地说,我怀疑他们可能只是把它侵入了一个现有的方法)

明白了,
typeof(SqlBytes);我已编辑以按val按ref显示这两种操作