Edit: Le paragraphe suivant ne s'applique plus, comme l'a été modifié depuis la question de l'OP.
Tout d'abord, votre second code semble
logiquement incorrect: Vous voulez apparemment appeler le poseur, mais pendant que vous fournissez une valeur pour
index
, vous ne fournissez pas la
value
réelle (à savoir
item
). Je reviendrai sur cette question dans un instant.
Vous pouvez envelopper une fonction déléguée anonyme ou lambda autour du setter de propriété, par exemple (En utilisant un délégué anonyme) pour le rendre invocable:
dispatcher.Invoke(
new Action<T>( delegate (T item) { this[index] = item; } ),
item);
ou (en utilisant une fonction lambda disponible depuis C# version 3):
dispatcher.Invoke(
new Action<T>( (T item) => { this[index] = item; } ),
item);
Note: Vous créez un délégué anonyme ou lambda fonction qui accepte un argument (item
). L'autre argument requis (index
) provient du contexte "externe". (Le terme fermeture vient à l'esprit.) Je vois cela comme le seul moyen de changer votre dispatcher
en un type délégué qui est parfois appelé avec deux arguments au lieu d'un.
Si cela est toutefois pas un problème, le code Invoke
pourrait changer à .: par exemple
dispatcher.Invoke(
new Action<int,T>( (int index, T item) => { this[index] = item; } ),
index, item);
Oops, ai oublié de passer 'value' retour. Je vais essayer ça demain. Je * pensais * que je pouvais faire quelque chose comme ça, mais je ne pouvais pas me souvenir de la syntaxe appropriée. – mpen
Pourquoi transmettez-vous l'élément mais pas l'index au délégué? S'il n'est pas nécessaire de passer l'index, alors il ne devrait pas être nécessaire de passer l'article non plus? 'dispatcher.Invoke (new Action (() => {this [index] = valeur;}));' – mpen
En regardant le code que vous avez posté dans votre question, j'ai supposé que 'dispatcher.Invoke' nécessitait une' Action '(c'est-à-dire un délégué avec un seul paramètre). Cependant, si vous pouvez passer deux arguments, alors bien sûr, vous pourriez aussi bien passer 'index' directement au délégué. Choisissez ce qui fonctionne le mieux dans votre cas! –
stakx