linq c#的值为什么会改变
本文关键字:改变 为什么 linq | 更新日期: 2023-09-27 18:06:11
很容易说,为什么这两个qqq
在断点上不同?TodayInformation
和YesterdayInformation
实际上是List<MyClass>
型
很奇怪,像往常一样,YesterdayInformation
不能通过这部分进行任何更改,但实际上YesterdayInformation
更新为TodayInformation
,我从未使用任何pointer
或reference
?
var qqq = YesterdayInformation;
var TodayInformation = YesterdayInformation;
TodayInformation.Select(o =>
{
o.Signal = SignalpairList.Where(p => p.pair == o.pair).Select(p => p.signal).First();
o.SigmaMove = SigmaMovepairList.Where(p => p.pair == o.pair).Select(p => p.SigmaMove).First();
o.Date = Today;
return o;
}).ToList();
qqq = YesterdayInformation;
因为TodayInformation
和YesterdayInformation
是同一个引用。您有一个对TodayInormation
的查询,但是您修改了.Select
方法中的每个项目。你的查询类似于:
var TodayInformation = YesterdayInformation;
foreach(var o in TodayInformation)
{
//you are modifying each item of TodayInformation collection
o.Signal = SignalpairList.Where(p => p.pair == o.pair).Select(p => p.signal).First();
o.SigmaMove = SigmaMovepairList.Where(p => p.pair == o.pair).Select(p => p.SigmaMove).First();
o.Date = Today;
}
我想你想要这个:
var TodayInformation = YesterdayInformation;
var result = TodayInformation.Select(o => new
{
Signal = SignalpairList.Where(p => p.pair == o.pair).Select(p => p.signal).First(),
SigmaMove = SigmaMovepairList.Where(p => p.pair == o.pair).Select(p => p.SigmaMove).First(),
Date = Today
}).ToList();
这个查询遍历集合TodayInformation
,在不修改原始项的情况下将数据加载到一个匿名对象,并将结果列表设置为一个变量。
我不太确定你在说什么或问什么,但是代码基本上是一个循环更新项目。
这样会清晰得多,并且与您的代码相当。
var TodayInformation = YesterdayInformation;
foreach (var oin TodayInformation) {
o.Signal = SignalpairList.Where(p => p.pair == o.pair).Select(p => p.signal).First();
o.SigmaMove = SigmaMovepairList.Where(p => p.pair == o.pair).Select(p => p.SigmaMove).First();
o.Date = Today;
}