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

StackOverflow https://stackoverflow.com/questions/1342106

  •  20-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

Оказывается, существует ограничение на количество общих параметров, которые можно использовать с помощью 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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top