Comment puis-je passer à transmettre une référence en tant que paramètre à la méthode ASYNC dans l'application Windows Store? mais erreur: p> Les méthodes Async ne peuvent pas avoir de paramètres Ref ou Out P>
blockQuote> a une autre manière? p> Remarque:
Je cherche quelque chose comme ceci:
J'ai besoin de passer exactement obj.value. Cette méthode serait utilisée par différents types d'objets, par même type d'objets, par un objet, mais je vais passer obj.val_1, obj.val_2 ou obj.val_10. Toutes les valeurs seront de même type (pour la chaîne ex) p> p>
4 Réponses :
Vous pouvez transmettre directement l'objet lui-même et définir la valeur de la propriété correspondante à l'intérieur de la méthode: et si vous n'avez pas de tel objet, écrivez simplement une et que la méthode async prend cet objet comme paramètre: p>
S'il vous plaît, lisez la question: j'ai besoin de passer exactement obj.value. Cette méthode serait utilisée par différents types d'objets, par même type d'objets, par un objet, mais je vais passer obj.val_1, obj.val_2 ou obj.val_10
Veuillez lire le message d'erreur que vous obtenez: Ceci n'est pas pris en charge en C # et sauf si vous n'écrivez à un compilateur vous-même prenant en charge le passage des variables réf / sorties à Async CODE> Méthodes Je ne vois pas comment vous pouvez résoudre votre problème . Que pensez-vous d'autre que je vous le dise? Montrez-vous un exemple de travail de la façon de faire quelque chose qui n'est pas pris en charge?
Ma question est la suivante: "a une autre façon?" La réponse doit être abrégée: "Non, parce que ..." ou "Oui, tu dois faire ..." et répondez à laquelle vous fournissez déjà inutile.
Vous ne pouvez pas faire cela comme vous l'avez (comme vous le savez). Donc, quelques points de contournement:
Vous pouvez le faire en passant à l'objet initial car il s'agira d'un type de référence p> En fonction de vos commentaires, créez une interface et que vos classes l'appliquent (fournissant-la toujours le même type que vous souhaitez passer). Ensuite, vous pouvez transmettre l'interface partagée (peut-être sur tuer, dépend de vos besoins, voire une quantité irréaliste de travail). P> ou, fournissez une classe de base avec la propriété! (Je n'aime pas cette suggestion, mais puisque vous demandez quelque chose qui ne peut pas être fait, il peut suffire que je ne le recommande pas). P> Un exemple de l'interface est ici (non en utilisant ce que vous avez, mais étroit suffisamment à l'aide d'une application de colsone) p> EDIT2 strong> p> Après les commentaires suivants, vous aurez Pour toujours utiliser une interface, mais vous attribue la valeur par la suite. Je suis sûr qu'il y a une meilleure façon de le faire, mais cela fonctionne: p>
S'il vous plaît, lisez la question: j'ai besoin de passer exactement obj.value. Cette méthode serait utilisée par différents types d'objets, par même type d'objets, par un objet, mais je vais passer obj.val_1, obj.val_2 ou obj.val_10
@jimpanzer, j'ai fait - votre message ne mentionne jamais qu'il sera utilisé par différents types d'objets! Puis-je supposer que ce que VAL_1, VAL_2, etc. soit le même type?
VAL_1, VAL_2, VAL_10 - Tout le même type (chaîne ou int ou un autre, mais identique). Je dois passer une seule valeur, car je reçois cette valeur de différents endroits.
@jimpanzer, mis à jour - Vous pouvez peut-être utiliser une interface pour cela.
Je comprends votre idée, mais dans ma classe peut être numéro, numéro1, numéro2 ... et de nombreux autres chiffres. Et je veux passer une seule valeur. Mais merci que vous passez votre temps.
@jimpanzer, OK, c'est ma dernière tentative :) Encore une fois, pas la solution la plus belle, mais cela vous donne une idée.
Laissez-nous Continuez cette discussion en chat
@jimpanzer, je suis désolé, je n'ai tout simplement pas plus de temps aujourd'hui. Bonne chance si, espérons-le, cela aide au moins!
Vous pouvez toujours utiliser la classe edit strud> p> OK, l'autre moyen d'aller avec cela que je peux penser à cela. la mise à jour de l'élément de l'objet donné dans une méthode, puis adoptant une action invoquant cette méthode comme argument de la tâche, comme: p> aussi loin que je l'ai testé le changement était Fabriqué dans le fil de l'enfant, mais il est toujours à effet visible dans le fil parent. J'espère que cela vous aide. P> p> tâche <> code> et renvoyer la valeur souhaitée. Ensuite, votre code ressemblerait à quelque chose comme:
Je sais de cette façon, mais je cherche une façon, je peux changer de valeur à l'intérieur de la tâche ASYNC. Mais +1 pour vous.
À propos de votre édition: vous n'êtes pas autorisé à utiliser le paramètre Réflexion à l'intérieur de Lambda Expression.
Si vous ne vous souciez pas d'un peu de frais générale et éventuellement une durée de vie prolongée de vos objets, vous pouvez imiter le comportement REF en passant un seigment et une méthode getter à la fonction, comme ceci:
await DoStuff(() => obj.Value, x => obj.Value = x);
Je crois que c'est une bonne réponse pour plusieurs raisons et il peut étendre la réutilisabilité de ses nombreux types d'objet en le faisant générique: Dostuff
Nate Diamond, je pense que la fonction et l'action sont déjà des délégués de type générique