Question

J'utilise le Concurrency et de la coordination d'exécution et je suis à écrire du code similaire à ce qui est décrit dans la documentation. La ligne suivante ne peut pas compiler:

yield return new IterativeTask<string,Object,Object,long[]>("Hi",a,b,ls, itfunc);

Le compilateur donne ce message d'erreur:

The non-generic type 'Microsoft.Ccr.Core.IterativeTask' cannot be used with type arguments

Ce qui est mistifying parce que la documentation utilise cette méthode avec des arguments de type et il est clairement générique.

(je vais poster ma réponse ici, que encouragé si je comprends bien)

Était-ce utile?

La solution

Il se trouve qu'il ya une limite au nombre de paramètres génériques, on peut utiliser avec IterativeTask: il peut prendre trois mais pas plus

.

Alors, ce code est compilé (une fois que vous changez itfunc d'utiliser un argument moins):

yield return new IterativeTask<string,Object,long[]>("Hi",a,ls, itfunc);

Si vous avez vraiment besoin de toutes les informations dans les arguments, vous pouvez créer un certain type pour les tenir:

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top