2010-02-10 5 views
0

Considérons un scénario dans lequel un bloc de code tente de transmettre un objet anonyme à une autre méthode en C#.Passez et recevez des objets anonymes entre les méthodes en C#

Voici un exemple:

ThreadPool.QueueUserWorkItem(new WaitCallback(RpvService.GetRpvDailyResults), 
          new { req = request, rpvDic = rpvDictionary } 
          ); 

Comment pouvez-vous recevoir l'objet anonyme à la réception?

+1

Vous devriez vraiment pas faire cela. Passez un tuple. – ChaosPandion

+0

Ou juste définir une structure. –

Répondre

6

Il serait préférable de simplement définir votre propre classe ou structure.

Un objet anonyme n'est rien d'autre qu'une classe que le compilateur génère pour vous. C'est une mauvaise idée d'essayer de passer cela entre les méthodes, car cela va causer des problèmes.

Il n'y a pas d'inconvénient à définir le type vous-même. Comme il n'y a que deux objets, vous pouvez aussi utiliser KeyValuePair (.NET 2) ou Tuple (dans .NET 4).

1

De MSDN:

Un type anonyme a une portée de méthode. Pour transmettre un type anonyme ou une collection contenant des types anonymes en dehors d'une limite de méthode, vous devez d'abord convertir le type en objet. Cependant, cela détruit le typage fort du type anonyme. Si vous devez stocker vos résultats de requête ou les transmettre en dehors de la limite de la méthode, pensez à utiliser une structure ou une classe ordinaire nommée au lieu d'un type anonyme.

0

bien en C# 4.0, vous pouvez utiliser dynamique et vous pouvez le jeter à ce que vous wnat

Questions connexes