在使用Linq的过程中,如果要进行数据的比较和处理,请记住使用ToList()方法。

 1         private void simpleButton1_Click(object sender, EventArgs e)
 2         {
 3             List<TESTCLASS> list = new List<TESTCLASS>();
 4             int[] ary = new int[] { 1,1,1,1,2,2,2,3,3,3,4,4,4};
 5 
 6             for (int i = 0; i < 100; i++)
 7             {
 8                 list.Add(new TESTCLASS(i, i));
 9             }
10 
11             var list2 = from t in list
12                         select new TESTCLASS(t.X, t.Y);
13 
14             foreach (var t in list2)
15             {
16                 while (true)
17                 {
18                     MessageBox.Show(t.GetHashCode().ToString() + ":" + list2.ToList()[0].GetHashCode().ToString());
19                     MessageBox.Show(list2.ToList().IndexOf(t).ToString());
20                     return; ;
21                 }
22             }
23 
24         }
25 
26         public class TESTCLASS
27         {
28             public TESTCLASS(int x, int y)
29             {
30                 this.x = x;
31                 this.y = y;
32             }
33 
34             int x;
35             public int X
36             {
37                 get
38                 {
39                     return x;
40                 }
41                 set
42                 {
43                     x = value;
44                 }
45             }
46 
47             int y;
48             public int Y
49             {
50                 get
51                 {
52                     return y;
53                 }
54                 set
55                 {
56                     y = value;
57                 }
58             }
59         }
60 
GetHashCode的值都不一样,检索结果为-1,按理说不应该呀,我是从list2集合中判读list2中的对象呀 。

关键代码如果改成如下方式就可以了,先将将结果保存到一个集合中就可以了
 1             var list2 = from t in list
 2                         select new TESTCLASS(t.X, t.Y);
 3             var list3 = list2.ToList();
 4             foreach (var t in list3)
 5             {
 6                 while (true)
 7                 {
 8                     MessageBox.Show(t.GetHashCode().ToString() + ":" + list3.ToList()[0].GetHashCode().ToString());
 9                     MessageBox.Show(list3.ToList().IndexOf(t).ToString());
10                     return; ;
11                 }
12             }
13 
原因不知道,只是发现了这个问题,如果那位大侠知道,就跟个贴,谢谢




----------------------------------- http://www.cnblogs.com/rock_chen/
原文地址:https://www.cnblogs.com/rock_chen/p/1125459.html