为什么C#说CCR的IterativeTask是非泛型的?

时间:2009-08-27 16:08:48

标签: c# ccr

我正在使用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 个答案:

答案 0 :(得分:3)

事实证明,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);