2016-04-08 28 views
1

params anahtar sözcüğünü kullanarak değişken uzunluk parametre listelerini nasıl bildireceğinizi biliyorum. Ama bu değişken uzunluk argümanlarını başka bir işleve aktarmak istediğiniz zaman. Örneğin: C# İletken değişken uzunluk bağımsız değişkenleri

public static void Main() { 
    varargs_m1(1,2,3,4); 
} 

public static void varargs_m1(params object[] args) { 
    varargs_m2(args);  // Writes args.Length = 4 
    varargs_m2(0, args); // Writes args.Length = 2 
          // args = [0, [1,2,3,4]] 
} 

public static void varargs_m2(params object[] args) { 
    Console.WriteLine("args.Length = " + args.Length); 
} 

ben varargs_m2(0, args) diyoruz

nasıl argümanlar

[1,2,3,4] [0] yerine [0,1,2,3,4] olarak alabilirsiniz

cevap

2

Var olan dizi {0} içeren senin yeni bir dizi bağlamak ve sonra geçebileceği LINQ Concat() yöntemiyle birlikte:

public static void varargs_m1(params object[] args) 
{ 
    varargs_m2(new object[]{0}.Concat(args).ToArray()); 
} 

Eğer tamamen LINQ kullanmaktan kaçınmak istediniz, basitçe yeni bir dizi oluşturabilir ve bu şekilde kullanabilirsiniz:

public static void varargs_m1(params object[] args) 
{ 
    // Your new values 
    var newValues = new object[]{ 0 }; 
    // Build a new array 
    var combined = new object[newValues.Length + args.Length]; 
    // Copy each of your values into the new array 
    newValues.CopyTo(combined, 0); 
    args.CopyTo(combined, newValues.Length); 
    // Pass your new values along 
    varargs_m2(combined); 
} 
0

Bu karışıklık yalnızca argüman türü object[] ise. int[]'a geçmeyi deneyin ve her şey açık olacak.

Btw cevap bulmak:

public static void varargs_m1(params object[] args) 
{ 
    varargs_m2(args); // 4 elements 
    var anotherArgs = new List<object>(args); 
    anotherArgs.Insert(0, 0); 
    // do other manipulations whatever you want... 
    varargs_m2(anotherArgs.ToArray()); // 5 elements 
} 
İlgili konular