我正在编写一个自动SQLCLR部署工具,我正在使用反射来发现必须声明的过程和函数。所以我使用这样的代码来构建部署汇编方法所需的T-SQL:
...
if (p.ParameterType == typeof(string))
{
sql = "nvarchar(4000)";
}
...
但是此方法包含在C#中声明为out SqlBytes bytes
且ParameterType为SqlBytes&
的参数。我无法使用typeof(SqlBytes&)
进行比较,因为语法无效。所以我有点疑惑SqlBytes&
类型究竟是什么,如果有办法为它生成typeof。我知道我可以求助于类型名称(即字符串)比较,这不是我的问题,我更好奇这是一个类型&
,看起来像C ++引用类型,但我估计在使用.Net的+ 10年里,我从未注意到它们。
答案 0 :(得分:6)
SqlBytes&
与out SqlBytes
(以及ref SqlBytes
完全相同)。基本上,out
和ref
实现相同,作为参考,通过引用。如果您正在使用反射并且当前有Type
实例,则可以使用以下方法获取参考版本:
Type type = ...
Type byRefType = type.MakeByRefType();
而且令人困惑的是,回到非副本版本:
Type origType = byRefType.GetElementType();
(我怀疑他们可能只是将其破解成现有方法,坦率地说)