代码之家  ›  专栏  ›  技术社区  ›  redtuna

为什么C#说CCR的迭代任务是非泛型的?

  •  0
  • redtuna  · 技术社区  · 17 年前

    我在用电话 Concurrency and Coordination Runtime

    yield return new IterativeTask<string,Object,Object,long[]>("Hi",a,b,ls, itfunc);
    

    编译器给出以下错误消息:

    The non-generic type 'Microsoft.Ccr.Core.IterativeTask' cannot be used with type arguments
    

    这是错误的,因为文档使用带有类型参数的方法,而且它显然是泛型的。

    (我将在这里发布我自己的答案,那就是 encouraged 据我了解)

    1 回复  |  直到 9 年前
        1
  •  3
  •   redtuna    17 年前

    事实证明,可以用于IterativeTask的泛型参数的数量是有限的:可以使用三个,但不能超过三个。

    因此,这段代码编译(一旦您将itfunc更改为少用一个参数):

    yield return new IterativeTask<string,Object,long[]>("Hi",a,ls, itfunc);
    

    如果确实需要参数中的所有信息,可以创建一些类型来保存它们:

    struct Z {
      string msg;
      Object one;
      Object two;
      long[] ls;
    }
    
    Z z = new Z { msg="Hi", one=a, two=b, ls= longs };
    yield return new IterativeTask<Z>(z, itfunc);
    
    推荐文章