【问题标题】:Initializing a task with an Action that invokes with an int parameter使用使用 int 参数调用的 Action 初始化任务
【发布时间】:2015-10-06 19:28:53
【问题描述】:

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

 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>

【问题讨论】:

  • 请显示失败的代码。
  • 它并没有像现在这样失败。新的 Task() 方法不接受将 int 作为 lambda 表达式的操作。我只想以 int 作为参数调用方法

标签: c# .net delegates action invoke


【解决方案1】:

由于您不能使用类型为 object 的参数调用 Action&lt;int&gt;,因此您需要手动转换它。请注意,如果要求是其他方式,那很好 - 您可以轻松地将 Action&lt;object&gt; 传递给预期的 Action&lt;int&gt;

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

如果你不能保证参数总是整数,你可能需要处理强制转换异常。

【讨论】:

    【解决方案2】:

    你能在调用之前box你的 int 吗?

    int i = 123;
    object o = i;
    

    【讨论】:

    • 问题是我需要在另一个类中使用特定的 int 声明我的 Action 并从该类中调用此构造函数。
    猜你喜欢
    • 1970-01-01
    • 2021-12-19
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多