【发布时间】:2014-07-20 12:15:41
【问题描述】:
我正在创建一个网络应用程序。 为此,我正在创建一个消息传递系统。 到目前为止我所拥有的(至少是一个 sn-p...)
public static byte[] ClassToBytes(GenericMessage Data)
{
int Size = Marshal.SizeOf(Data);
byte[] Buffer = new byte[Size];
IntPtr Ptr = Marshal.AllocHGlobal(Size);
Marshal.StructureToPtr(Data, Ptr, true);
Marshal.Copy(Ptr, Buffer, 0, Size);
Marshal.FreeHGlobal(Ptr);
return Buffer;
}
public static GenericMessage BytesToClass(byte[] Source, ClassType Type)
{
switch (Type) //This is going to be extended
{
case ClassType.GenericMessage:
return BytesToClass<GenericMessage>(Source);
break;
case ClassType.RequestMessage: //RequestMessage is derived from GenericMessage
return BytesToClass<RequestMessage>(Source);
break;
case ClassType.ResponseMessage: //ResponseMessage is derived from GenericMessage
return BytesToClass<ResponseMessage>(Source);
break;
default:
throw new KeyNotFoundException();
break;
}
}
public static T BytesToClass<T>(byte[] Source)
{
int Size = Marshal.SizeOf(typeof(T));
IntPtr Ptr = Marshal.AllocHGlobal(Size);
Marshal.Copy(Source, 0, Ptr, Size);
T result = (T)Marshal.PtrToStructure(Ptr, typeof(T));
Marshal.FreeHGlobal(Ptr);
return result;
}
基本上我想做的是:
public static GenericMessage BytesToClass(byte[] Source, ClassType Type)
{
return BytesToClass<Type>(Source);
}
枚举或者字典有没有这样的方法?
我已经尝试并搜索过,但没有任何结果。
【问题讨论】:
-
您可能缺少的搜索词是“c# generic method makegenericmethod”。
-
@usr,是什么让您认为这个问题只是关于尝试使用反射调用泛型方法?我认为你错了。他正在尝试将枚举与
Type相关联,这完全不同。 -
@KirkWoll 下面“基本上我想做的是:”他说他想动态提供一个泛型类型参数。这似乎是他缺少的部分。我会保持打开状态。
-
@KirkWoll 看看已经到来的答案。就像我今天关闭的约 20 个副本中的最佳答案一样,所有这些都是关于 MakeGenericMethod 的。微小的变化。这里的变化是他没有类型,而是一个作为类型名称的字符串。
-
@usr,问题是如何获取类型参数,荷兰人地址,但其他所谓的重复没有。