私はしばらくの間、誰かがこれに近いことをしようとしているかどうかを調べていましたが、一般的に型付けされたリストを操作しようとしている人がたくさんいるのを見つけました。代わりに、一般的に型付けされた複雑なオブジェクトのリストと対話する必要があります。これが現在のコードです。
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 からジェネリックを削除することになり、消費者は必要な応答タイプを知る責任があります。