Почему C # говорит, что IterativeTask в CCR не является универсальным? - PullRequest
0 голосов
/ 27 августа 2009

Я использую Среду параллелизма и координации и пишу код, аналогичный описанному в документации. Следующая строка не компилируется:

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

Что неверно, поскольку в документации этот метод используется с аргументами типа, и он явно универсален.

(я собираюсь опубликовать здесь свой собственный ответ, это поощряется , насколько я понимаю)

1 Ответ

3 голосов
/ 27 августа 2009

Оказывается, что существует ограничение на количество универсальных параметров, которые можно использовать с IterativeTask: это может занять три, но не более.

Итак, этот код компилируется (как только вы измените его, чтобы использовать на один аргумент меньше):

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);
...