17.5.1.4 tableaux de paramètres
un tableau de paramètres autorise arguments à être spécifié dans l'une de deux façons dans une invocation de méthode :
• L'argument donné pour un ensemble de paramètres peut être un expression unique d'un type implicitement convertible (§13.1) au type de tableau de paramètres . Dans ce cas, le tableau de paramètres agit précisément comme un paramètre de valeur.
• En variante, l'invocation peut spécifier zéro ou plusieurs arguments pour le tableau de paramètres , où chaque argument est une expression d'un type qui est implicitement convertible (§13.1) pour le type d'élément du tableau de paramètres. Dans ce cas, l'invocation crée une instance du type tableau de paramètres avec une longueur correspondant à le nombre d'arguments, initialise les éléments de l'instance de tableau avec les valeurs des arguments donnés et utilise la nouvelle matrice instance comme argument réel.
Dans la même section donne un exemple:
using System;
class Test
{
static void F(params int[] args) {
Console.Write("Array contains {0} elements:", args.Length);
foreach (int i in args)
Console.Write(" {0}", i);
Console.WriteLine();
}
static void Main() {
int[] arr = {1, 2, 3};
F(arr);
F(10, 20, 30, 40);
F();
}
}
produit la sortie
Array contains 3 elements: 1 2 3 Array
contains 4 elements: 10 20 30 40 Array
contains 0 elements:
Cet exemple illustre le comportement attendu: tableau vide
MS cacher bien cette information, j'ai vérifié la section params ;-) Merci beaucoup. – greenoldman
Solution de contournement pour ce problème: Créez une version surchargée de constructeur/méthode avec zéro argument. Ex: 'void foo()' et 'void foo (params int [] x)' – kevinarpe
Merci. Voici un nouveau lien qui indiquera ce à quoi Anthoney fait référence. [Listes d'arguments -> Exécution de l'évaluation des listes d'arguments] (https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/expressions#run-time-evaluation-of -argument-lists) – Darrelk