如题。
直接上代码
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 write(1, 2, 3); 6 Console.WriteLine("-----------------"); 7 write("1", "2", "3"); 8 Console.WriteLine("=============================="); 9 10 int[] iArr = new int[] { 1, 2, 3 }; 11 List<int> ilist = new List<int>() { 1, 2, 3 }; 12 write(iArr); 13 Console.WriteLine("-----------------"); 14 write(ilist); 15 Console.WriteLine("=============================="); 16 17 string[] strArr = new string[] { "1", "2", "3" }; 18 List<string> strlist = new List<string>() { "1", "2", "3" }; 19 write(strArr); 20 Console.WriteLine("-----------------"); 21 write(strlist); 22 Console.WriteLine("=============================="); 23 24 st[] stArr = new st[] { new st(), new st() }; 25 List<st> stList = new List<st> { new st(), new st() }; 26 write(stArr); 27 Console.WriteLine("-----------------"); 28 write(stList); 29 Console.WriteLine("=============================="); 30 31 DateTime[] dtArr = new DateTime[] { new DateTime(), new DateTime() }; 32 List<DateTime> dtlist = new List<DateTime>() { new DateTime(), new DateTime() }; 33 write(dtArr); 34 Console.WriteLine("-----------------"); 35 write(dtlist); 36 Console.WriteLine("=============================="); 37 38 List<cls> clsList = new List<cls> { new cls(), new cls() }; 39 cls[] clsArr = new cls[] { new cls(), new cls() }; 40 //object[] objs = (object[])clses; 41 write(clsArr); 42 Console.WriteLine("-----------------"); 43 write(clsList); 44 //write(objs); 45 } 46 static void write(params object[] arr) 47 { 48 Console.WriteLine(arr.Length); 49 //foreach (object o in arr) 50 //{ 51 // Console.WriteLine(o.GetType()); 52 //} 53 } 54 //static void write(object[] arr) 55 //{ 56 // Console.WriteLine(arr.Length); 57 //} 58 } 59 public class cls 60 { 61 62 } 63 public struct st 64 { 65 66 }
运行结果如下:
那么问题来了:
list和array为值类型元素集合时,params均当做一个object来处理,打印结果都为1。
当为引用类型集合时,params将array转成object数组,打印结果为array.Length;将list当做一个object对象来处理,打印结果为1。
这是params的差异化处理还是强制类型转换失败造成的结果?求解答!
虽然没看懂你问什么。。 不过看完代码说下我自己的理解
list 是一个集合类 里面无论是什么类型 进入write方法 都会被逆变成一个object 。
值类型集合 传入write后 会被装箱成一个 object 。
引用类型数组 中每个元素都会被逆变成一个object。最终组合成一个object[]