2

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

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

但是这个方法包含一个在 C# 中声明的参数 asout SqlBytes bytes并且 ParameterType 是SqlBytes&. 我不能typeof(SqlBytes&)用于比较,因为语法无效。所以我有点困惑到底是什么SqlBytes&类型,以及是否有办法为它生成 typeof。我知道我可以求助于类型名称(即字符串)比较,这不是我的问题,我更好奇这样的类型是什么&,似乎是 C++ 引用类型,但我认为 +10 年使用.Net 我从来没有注意到它们。

在此处输入图像描述

4

1 回答 1

6

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

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

并且相当令人困惑的是,回到非参考版本:

Type origType = byRefType.GetElementType();

(坦率地说,我怀疑他们可能只是将其入侵到现有方法中)

于 2012-11-14T09:45:59.293 回答