gpt4 book ai didi

C#:如何制作类型泛型方法(字节/字/双字)?

转载 作者:太空宇宙 更新时间:2023-11-03 17:37:23 25 4
gpt4 key购买 nike

我是泛型的新手,我在 C# 中能找到的只有 List[T] - 没有别的。

这是我必须用 C# 翻译的 C++ 代码

template <class type>
type Read()
{
type t;
int s = sizeof(type);
if(index + s > size)
throw(std::exception("error 101"));
memcpy(&t, stream + index, s);
index += s;
return t;
}

是这样叫的

BYTE mode = Read<BYTE>();
DWORD mode1 = Read<DWORD>();
WORD mode2 = Read<WORD>();

问题:如何使用 C# 泛型来做到这一点?

最佳答案

您的代码似乎模仿了 ReadInt16 , ReadInt32ReadInt64 BinaryReader 的方法类。

在不了解您的全局变量的情况下很难提供重写。假设流是一个字节数组,下面的代码就可以工作。

public T Read<T>() where T : struct {
// An T[] would be a reference type, and alot easier to work with.
T[] t = new T[1];

// Marshal.SizeOf will fail with types of unknown size. Try and see...
int s = Marshal.SizeOf(typeof(T));
if (_index + s > _size)
// Should throw something more specific.
throw new Exception("Error 101");

// Grab a handle of the array we just created, pin it to avoid the gc
// from moving it, then copy bytes from our stream into the address
// of our array.
GCHandle handle = GCHandle.Alloc(t, GCHandleType.Pinned);
Marshal.Copy(_stream, _index, handle.AddrOfPinnedObject(), s);

_index += s;

// Return the first (and only) element in the array.
return t[0];
}

关于C#:如何制作类型泛型方法(字节/字/双字)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/765794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com