• 在使用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/
  • 相关阅读:
    深拷贝
    属性showoverflowtooltip内容过多时,如何设置tooltip的宽度,让其多行显示
    vue 实现点击全屏和退出全屏
    大数计算 BigInt()
    vue3 添加 vuex
    width:inherit
    Object 方法整理
    Python逆向爬虫之requests
    爬虫及浏览器开发者工具
    Python逆向爬虫之urllib
  • 原文地址:https://www.cnblogs.com/rock_chen/p/1125459.html
Copyright © 2020-2023  润新知