2009-08-27 2 views
0

Я использую Concurrency and Coordination Runtime и пишу код, аналогичный тому, что описано в документации. Следующая строка не может скомпилировать:Почему C# говорит, что IterativeTask CCR не является общим?

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 

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

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

ответ

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); 
Смежные вопросы