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

Я использую http://en.wikipedia.org/wiki/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

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

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

1 ответ

Решение

Оказывается, существует ограничение на количество универсальных параметров, которые можно использовать с 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);
Другие вопросы по тегам