【发布时间】:2014-10-03 10:21:50
【问题描述】:
我有一个传递的数据对象:
public class TimedResult<T>
{
public ResultRequest Request { get; set; }
public T Data { get; set; }
public TimeSpan TimeTaken { get; set; }
}
在我的经理类中,我完成了一些引发事件的工作:
public void Execute(ResultRequest request)
{
var result = new TimedResult<DataTable>();
// fill data object here
OnResult(result);
}
我已将OnResult 方法设为通用:
protected virtual void OnResult<T>(TimedResult<T> result)
{
if (Result != null)
Result(this, result);
}
但是如何使事件声明通用?
public event EventHandler<TimedResult<T>> Result; // red line under T
我应该怎么做?
【问题讨论】:
-
T来自哪里?它应该是类定义的一部分class Manager<T> -
@lc。好问题,我对泛型不太熟悉,我想我想做的是能够使用相同的
OnResult方法和事件返回TimedResult<DataTable>和TimedResult<int>。 -
@Muhammad 那么你最好的选择是使用
object,即public event EventHandler<TimedResult<object>> Result;;p -
这有点 XY 但快速查看,我认为您正在尝试异步执行某些操作并返回结果。为什么不直接使用 TPL?在
Execute方法中返回一个等待的Task,您根本不需要该事件: public async Task<T> Execute(ResultRequest request) {...}。当然,我假设执行的人是监听结果的人。 -
@MarcGravell 是的,这就是我在决定随机将 T 放在那里之前所拥有的东西:D
标签: c# events generics delegates eventargs