C#泛型 - 数组?

5
如何在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;
}   

当被调用时,它会通过在特定位置(索引)读取流(stream)并向给定数组中追加字节/单词/(类型)。

我尝试将声明重做如下,但出现错误:

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

谢谢! 另一个保守的问题 - 如何将字节附加到该数组(memcpy())中,我应该使用指针吗?
2个回答

16
你可以这样使用它:
public static void ReadArray<T>(T[] inputArray) {
   ...
}

你可以使用Array.Copy方法在数组之间复制数据。
编辑:
如果您想在不同的数据类型之间进行“盲目复制”,例如从字节数组到长整型数组,这不是使用安全代码可以完成的任务。例如,您可以使用BitConverter类将数组中的八个字节转换为一个长整型数。您也可以使用指针的不安全代码来进行“盲目复制”,但是应该在使用安全方法出现性能问题时再尝试此方法。

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

要追加到数组中,您应该将其转换为List

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

哎呀,谢谢你纠正我,老兄。我刚才复制粘贴的时候没有检查。 - oscarkuo
我不理解复制方法。另一个数组是什么 - 它是C++代码中的流吗? - Ivan Prodanov
抱歉,我再次阅读了您的代码后,我认为您真正需要的是复制而不是追加。只需像Guffa建议的那样使用Array.Copy()即可。 - oscarkuo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接