欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c# List使用中遇到的问题

程序员文章站 2022-04-08 19:09:08
最近在项目上写的方法,想通过减少访问数据层,将需要重复调用的值存入List,无意中碰到的一个巨坑,至今仍不明所以,在此写出来,一来是看看有没有同道中人,二来是看看有没有大牛能解惑。 逻辑如下: 1、从数据库中获取AList(yycfList) 2、new一个BLis(_yycfList),将ALis ......

最近在项目上写的方法,想通过减少访问数据层,将需要重复调用的值存入list,无意中碰到的一个巨坑,至今仍不明所以,在此写出来,一来是看看有没有同道中人,二来是看看有没有大牛能解惑。

逻辑如下:

1、从数据库中获取alist(yycflist)

2、new一个blis(_yycflist),将alist中的部分值赋予它

3、改变blist中的值

4、alist的值也变了

 

代码如下:

 1 list<a> alist = getalist();
 2 list<x> xlist = getxlist();
 3 list<y> ylist = getylist();
 4 foreach (var y in ylist)
 5 {
 6     list<a> blist = alist.findall(x => x.customtype == y.customtype);
 7     if (y.isprivate || y.issustainable)
 8     {
 9         foreach (var b in blist)
10         {
11             x _x = xlist.find(x => x.curve == b.curve &&
12                                    x.customtype == b.customtype &&
13                                    x.fixtype == (y.issustainable ? 2 : 1));
14             if (_x != null)
15             {
16                 
17                 b.afactor = b.afactor + _x.drange / 100;    //此处修改后直接影响alist的值
18                 b.cfactor = b.cfactor + ((_x.urange - _x.drange) / 5 / 100);
19             }
20         }
21     }
22 }

 

最终解决代码:

 1 list<a> alist = getalist();
 2 list<x> xlist = getxlist();
 3 list<y> ylist = getylist();
 4 foreach (var y in ylist)
 5 {
 6     list<a> blist = alist.findall(x => x.customtype == y.customtype);
 7 
 8     if (y.isprivate || y.issustainable)
 9     {
10         blist = new list<a> ();  //此处重新new blist
11         foreach (var b in alist.findall(x => x.customtype == y.customtype))
12         {
13             x _x = xlist.find(x => x.curve == b.curve &&
14                                    x.customtype == b.customtype &&
15                                    x.fixtype == (y.issustainable ? 2 : 1));
16             b _b = new b();  //此处new一个b
17             if (_x != null)
18             {
19                 _b.afactor = b.afactor + _x.drange / 100;
20                 _b.bfactor = b.bfactor;
21                 _b.cfactor = b.cfactor + ((_x.urange - _x.drange) / 5 / 100);
22                 blist.add(_b);  //将改变后的b加入list
23             }
24             else
25             {
26                 blist.add(b);   //无需改变则将旧b加入list
27             }
28         }
29     }
30 }