2012-11-14 34 views
1

我正在編寫一個自動SQLCLR部署工具,我正在使用反射來發現必須聲明的過程和函數。所以我用這樣的代碼來構建部署裝配方法所需的T-SQL:ParameterInfo.ParameterType是「SqlBytes&」,如何與typeof()相比

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

但這種方法包含在C#中聲明爲out SqlBytes bytes的參數和參數類型被SqlBytes&。我無法使用typeof(SqlBytes&)進行比較,因爲語法無效。所以我對SqlBytes&類型究竟是什麼以及是否有辦法爲它生成typeof有點困惑。我知道我可以求助於類型名稱(即字符串)比較,而不是我的問題,我更好奇這是什麼類型的&,看起來像一個C++參考類型,但我估計在+10年與.Net工作我從來沒有注意到他們。

enter image description here

回答

5

SqlBytes&是完全一樣out SqlBytes(和ref SqlBytes,因爲它發生)。基本上,outref作爲參考,通過引用相同地實現。如果使用的是反射,但目前有一個Type比如,你可以通過使用獲得的參考版本:

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

,相當容易混淆,要回到非受-REF版本:

Type origType = byRefType.GetElementType(); 

(我懷疑他們可能只是黑客是在現有的方法中,坦率地說)

+0

明白了,'typeof運算(SqlBytes).MakeByRefType()' –

+0

@RemusRusanu燁;我已編輯顯示by-val <===> by-ref操作 –