我一直在寻找一段时间,看看是否有人试图做一些接近这个的事情,我发现有一群人试图与一个通用类型的列表进行交互。相反,我需要与一般类型的复杂对象列表进行交互。这是当前代码。
public class RequestBundleItem<T> where T : BaseJsonResponseMessage
{
public T Response { get; private set; }
//intializers - code not needed
public void SetResponse(String jsonResponse)
{
Response = (T)jsonResponse.JsonToObject<T>();
}
}
public class RequestBundleManager
{
private List<RequestBundleItem<T>> BundleItems;
public async Task<List<RequestBundleItem<T>>> ProcessItemsAsync()
{
List<Task<JsonValueEventArgs>> tasks = //create tasks from bundleitems;
for (var i = 0; i < tasks.Count(); i++)
{
Task<JsonValueEventArgs> curTask = tasks[i];
var args = await curTask;
BundleItems[i].SetResponse(args.ValueAsText);
}
return BundleItems;
}
public void AddItem<T>(RequestBundleItem<T> newItem) where T : BaseJsonResponseMessage
{
BundleItems.Add(newItem);
}
}
这条线是导致问题的原因
private List<RequestBundleItem<T>> BundleItems;
我不知道如何定义这个列表,因为 T 是通用的,只需要实现 BaseJsonResponseMessage 但我不想输入 RequestBundleManager 本身。
解决方案:
我最终从 RequestBundleItem 中删除了泛型,消费者负责了解它需要返回的响应类型。