我有一个类 - 在实例化时 - 创建一个后台线程,等待通过 System.Threading.AutoResetEvent 完成工作。当工作可用时,线程将从通用队列中拉出一个对象以进行工作,然后在完成时从该对象调用回调委托。
然而,魔鬼在细节中:为了完成它的工作,线程调用了一个泛型函数,所以线程需要知道一个类型。我可以将队列中的对象定义为接受泛型,但如何定义队列以接受真正泛型的对象,即它的类型可以是任何东西?后台线程如何推断其通用函数调用所需的类型?
示例代码:
class GenericItem<T>
{
// ... some code ...
}
// somewhere else in code
Queue<GenericItem> myGenericListofItemsToWorkOn;
显然 C# 不喜欢最后一行,因为我试图不指定具体类型,所以我可以执行以下操作:
myGenericListofItemsToWorkOn.Enqueue( new GenericItem<string>() );
myGenericListofItemsToWorkOn.Enqueue( new GenericItem<int>() );
然后我的线程需要执行以下操作:
GenericItem obj = myGenericListofItemsToWorkOn.Dequeue(); // How can I reference a generic item here?
Library.Call<...>(...); // How can I infer the generic type of the item dequeued here?