有沒有人有把ref byte
轉換成byte[]
的經驗?如何將ref字節轉換爲byte []?
如果函數取像
void foo(ref byte buffer);
參數則有可能使用
void call_func()
{
byte arr[] = new byte[10];
foo(ref arr[0]);
}
的問題是如何可以在一個所述buffer
參數重新轉換成byte[]
陣列中的調用foo
foo
。
有沒有人有把ref byte
轉換成byte[]
的經驗?如何將ref字節轉換爲byte []?
如果函數取像
void foo(ref byte buffer);
參數則有可能使用
void call_func()
{
byte arr[] = new byte[10];
foo(ref arr[0]);
}
的問題是如何可以在一個所述buffer
參數重新轉換成byte[]
陣列中的調用foo
foo
。
你不知道。
爲了避免固定整個數組,運行時可能會複製所選的單個元素(然後在調用後複製)。在這種情況下,你的函數將獲得臨時副本的地址,這與其他數組元素的地址無關。 (好吧,there could be some aliasing considerations,這種優化更有可能用於拼音和/或遠程調用,其中混疊分析更可行)
如果您需要數組,請傳遞數組。
如果您不在意它可能無法正常工作,您可以使用不安全的代碼來訪問其他元素。
pinned(byte* p = &buffer) {
buffer[4] = 0;
}
+1,你會搞砸任何人試圖調試你的代碼的大腦,如果你做 –
謝謝@BenVoigt! 似乎我有一個原因來調查swig的行爲(瞭解爲什麼暴露refsbyte而不是ref sbyte []從unsigned char *)。解釋清楚。 – khkarens
Ben,C#中[ref](http://msdn.microsoft.com/en-us/library/14akc2c7.aspx)的定義似乎與你解釋的內容矛盾。他們說_傳遞引用的效果是,方法中參數的任何變化都會反映在調用方法中的基礎變量變量中。因此,我沒有得到優化器如何才能引用引用的想法並傳遞臨時價值? – khkarens
如果您需要傳遞數組,爲什麼不傳遞數組? C#不是C. – Vlad
您應該放棄您的一些c/C++習慣...... –
@khkarens:C++/CLI比讓C#調用現有的C++代碼比SWiG更好。 –