Perché C # dire che IterativeTask del CCR non è generica?
Domanda
Sto utilizzando il Concurrency Runtime e coordinamento e sto scrivendo codice simile a ciò che è descritto nella documentazione. La seguente riga non riesce a compilare:
yield return new IterativeTask<string,Object,Object,long[]>("Hi",a,b,ls, itfunc);
Il compilatore fornisce questo messaggio di errore:
The non-generic type 'Microsoft.Ccr.Core.IterativeTask' cannot be used with type arguments
Che è mistifying perché la documentazione utilizza questo metodo con argomenti di tipo ed è chiaramente generico.
(ho intenzione di inviare la mia risposta qui, questo è incoraggiato se ho capito bene)
Soluzione
Si scopre che c'è un limite al numero di parametri generici si può usare con IterativeTask: si può prendere tre, ma non di più
.Quindi, questo compila codice (una volta che si cambia itfunc di utilizzare un argomento in meno):
yield return new IterativeTask<string,Object,long[]>("Hi",a,ls, itfunc);
Se si ha realmente bisogno di tutte le informazioni negli argomenti, è possibile creare un certo tipo di tenerli:
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);