首页 新闻 会员 周边 捐助

关键字params 求解惑

0
悬赏园豆:10 [待解决问题]

如题。

直接上代码

 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的差异化处理还是强制类型转换失败造成的结果?求解答!

  

棉花年度的主页 棉花年度 | 初学一级 | 园豆:192
提问于:2014-11-20 11:22
< >
分享
所有回答(1)
0

虽然没看懂你问什么。。 不过看完代码说下我自己的理解

list 是一个集合类 里面无论是什么类型  进入write方法 都会被逆变成一个object 。

值类型集合 传入write后 会被装箱成一个 object 。

引用类型数组 中每个元素都会被逆变成一个object。最终组合成一个object[]

暗雾霾 | 园豆:360 (菜鸟二级) | 2014-11-24 17:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册