保持通用对象的集合

时间:2014-01-16 21:16:22

标签: c# generics

在我的应用程序中,我有一个WebManager进行Web调用,并在完成后为每个调用执行回调。传递给回调的对象取决于正在进行的特定Web调用,因此是通用的。简化,它看起来像这样:

public struct CommandParam<T> where T : DtoBase, new()
{
    public DtoBase command;
    public Action<T> onSuccess;
    public Action onFailure;
    public WWW www;
}

当Web调用成功时,文本将在正确的响应类中反序列化:

response = (T) JsonReader.Deserialize(commandParams.www.text, typeof(T));
commandParams.onSuccess(response);

但是当网络呼叫失败时,我想排队相关的CommandParam<T>。在下一次Web调用或显式指令时,如果可能,将处理队列。我想象一个简单的队列:

private static Queue<CommandParam<DtoBase>> failedCommandQueue;

问题是,我显然无法将任何旧的CommandParam<T>添加到队列中。此外,CommandParam<T>无法投放到CommandParam<DtoObject>

所以我的问题是寻找适当处理这种情况的方法。我最近的想法是做一些动态的装箱/拆箱:

private struct BoxedCommand
{
    public Type type;
    public Object commandParam;
}

private static Queue<BoxedCommand> failedCommandQueue;

但我不知道实际上可以进行拆箱,因为在某些时候它需要使用type来转换commandParam(例如(type) commandParam)。

0 个答案:

没有答案