2009-04-20 65 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