Voici votre réponse théorique :
Afin de pousser les arguments des méthodes sur la pile, le code compilé peut choisir parmi les opcodes MSIL suivants :
ldarg.0
ldarg.1
ldarg.2
ldarg.3
ldarg.S
ldarg
ldarg.0
à ldarg.3
est utilisé pour pousser les 4 premiers arguments de méthode sur la pile (y compris this
comme premier argument pour les méthodes d'instance).
ldarg.S
prend un numéro d'argument de 8 bits, et donc il peut être utilisé pour pousser jusqu'à 256 arguments sur la pile.
Ce qui nous laisse avec le bon vieux ldarg
qui peut gérer le plus grand nombre d'arguments de méthode : il prend un numéro d'argument non signé de 16 bits, de sorte que le plus grand nombre d'arguments qui peuvent être compilés avec succès dans un MSIL valide est le suivant 2^16 = 65,536
.
Toutefois, comme d'autres l'ont fait remarquer, la limite réelle dépendra des détails de mise en œuvre du runtime. D'après la réponse de rmiesen, il semble que l'implémentation actuelle de .NET limite le nombre maximum de paramètres à 2^14
.
11 votes
Ce serait une bonne question pour @JonSkeet :)
12 votes
Parce que connaître les réponses à des questions apparemment triviales comme celle-ci peut vous épargner des heures ou des jours de débogage pénible... surtout si une méthode générée automatiquement génère des méthodes avec un nombre de paramètres extrêmement élevé (appelé arité dans le jargon informatique).