¿Cómo puedo crear un método que tenga parámetros opcionales y params juntos?
static void Main(string[] args) { TestOptional("A",C: "D", "E");//this will not build TestOptional("A",C: "D"); //this does work , but i can only set 1 param Console.ReadLine(); } public static void TestOptional(string A, int B = 0, params string[] C) { Console.WriteLine(A); Console.WriteLine(B); Console.WriteLine(C.Count()); }
Su única opción ahora es sobrecargar el TestOptional (como tenía que hacer antes de C # 4). No preferido, pero limpia el código en el punto de uso.
public static void TestOptional(string A, params string[] C) { TestOptional(A, 0, C); } public static void TestOptional(string A, int B, params string[] C) { Console.WriteLine(A); Console.WriteLine(B); Console.WriteLine(C.Count()); }
Tratar
TestOptional("A", C: new []{ "D", "E"});
Esto funcionó para mí:
static void Main(string[] args) { TestOptional("A"); TestOptional("A", 1); TestOptional("A", 2, "C1", "C2", "C3"); TestOptional("A", B:2); TestOptional("A", C: new [] {"C1", "C2", "C3"}); Console.ReadLine(); } public static void TestOptional(string A, int B = 0, params string[] C) { Console.WriteLine("A: " + A); Console.WriteLine("B: " + B); Console.WriteLine("C: " + C.Length); Console.WriteLine(); }