【发布时间】:2014-08-20 03:19:59
【问题描述】:
我想创建一个通用结构(基本上是一个数组)并将可能的类型限制为 ISerializable 类型和一堆本机数据类型,如 int、uint、float、double、char 等。问题是我无法标记这些具有接口的本机数据类型和我的研究表明,在泛型类型约束构造(where 子句)中不可能使用 or 关键字之类的东西。所以问题是我如何才能意识到这一点?
如果您对上下文感兴趣:我有一个 BinaryStream 类负责读取/写入流。 custom ISerializable 接口具有函数void Serialize(BinaryStream f),可以从/向流f 读取或写入(取决于f 中的状态)。实际写入或读取的当然是构成结构的本机数据类型。这些是通过f.Transfer(ref data) 读取或写入的。使用 .NET 框架中的标准 BinarySerializer 不是一种选择,因为它必须以自定义方式完成。
public class AutoArray<T> : ISerializable where T : ISerializable //or int or uint or float etc.
{
private uint n;
private T[] data;
public void Serialize(BinaryStream f)
{
f.Transfer(ref n);
for (int i = 0; i < n; i++)
if (data[i] is ISerializable) data[i].Serialize(f);
else f.Transfer(ref data[i]);
}
}
【问题讨论】: