使用使用int参数调用的Action初始化任务

时间:2015-10-06 19:28:54

标签: c# .net delegates action invoke

我的班级中有以下构造函数,它初始化我的任务:

 public ReportGeneratorThread(Func<int, bool> getPermission, Action<object> a)
    {            
        this.action = a;           
        this.t = new Task(this.action = this.InvokedAction, this.cancellationToken);
        this.getPermission = getPermission;            
    }

将定义将由任务调用的InvokedAction方法,例如:

private void InvokedAction(object obj)
    {        
        Debug.WriteLine(DateTime.Now.ToLongTimeString() + " Task " + this.t.Id + " has STARTED Generating a report");
        this.GenerateReport();
        throw new ArgumentException("For testing purpose");                   
    }

当我想用int而不是对象调用此方法时会出现问题,因为任务不接受此方法。有没有任何方法可以使用带有:

的int值调用此方法
Action<int>

2 个答案:

答案 0 :(得分:3)

由于您无法使用object类型的参数调用Action<int>,因此需要手动转换它。请注意,如果要求是相反的,那就没关系了 - 您可以轻松地将Action<object>传递给期望Action<int>的地方。

... new Task( v => intAction((int)v),...

如果您不能保证参数始终是整数,则可能需要处理强制转换异常。

答案 1 :(得分:0)

你可以在调用之前box使用你的int吗?

int i = 123;
object o = i;