2009-04-20 73 views
3

如何在C#中重做該C++模板函數的聲明?C#泛型 - 數組?

template <class type> 
void ReadArray(type * array, unsigned short count) 
{ 
    int s = sizeof(type) * count; 
    if(index + s > size) 
     throw(std::exception("Error 102")); 
    memcpy(array, stream + index, s); 
    index += s; 
} 

當被調用時,它通過在一個特定的位置(索引)讀取流(流)追加字節/字/給定的陣列中(類型)。

我試圖重做這樣的聲明,但我得到一個錯誤

public static T void ReadArray(<T> Array inputarray) // error 
    { 
     ... 
    } 

謝謝!

另一個保守的問題 - 如何將字節追加到該數組(memcpy()),我應該使用一個指針?

回答

14

你使用這樣的:

public static void ReadArray<T>(T[] inputArray) { 
    ... 
} 

可以使用Array.Copy方法複製陣列之間的數據。

編輯:
如果您想在不同數據類型之間進行數據的「盲目複製」,例如,字節數組轉換爲長數組,這不是您可以使用安全代碼執行的操作。例如,可以使用BitConverter類將數組中的八個字節轉換爲長整數。您也可以使用不安全的代碼和指針來執行「盲目複製」,但您應該保存該代碼,直到使用安全方法真正遇到性能問題。

2
public static void ReadArray<T>(T[] inputarray) 
    { 
     ... 
    } 

要追加到一個數組,你應該把它隱蔽的列表

List<T> list = new List<T>(); 
list.AddRange(inputarray); 
list.AddRange(anotherArray); 
+0

什麼是T空白? – 2009-04-20 07:05:14