2

自動化されたSQLCLRデプロイメントツールを作成しており、リフレクションを使用して、宣言する必要のあるプロシージャと関数を検出しています。したがって、このようなコードを使用して、アセンブリメソッドの展開に必要なT-SQLを構築しています。

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

ただし、このメソッドにはC#で宣言されたパラメーターが含まれてout SqlBytes bytesおり、ParameterTypeはSqlBytes&です。typeof(SqlBytes&)構文が無効なため、比較には使用できません。だから私はSqlBytes&タイプが正確に何であるか、そしてそれのためのタイプを生成する方法があるかどうか少し戸惑っています。代わりに型名(つまり文字列)の比較に頼ることができることは知っていますが、それは私の質問ではありません&。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 に答える