linq c#的值为什么会改变

本文关键字:改变 为什么 linq | 更新日期: 2023-09-27 18:06:11

很容易说,为什么这两个qqq在断点上不同?TodayInformationYesterdayInformation实际上是List<MyClass>

很奇怪,像往常一样,YesterdayInformation不能通过这部分进行任何更改,但实际上YesterdayInformation更新为TodayInformation,我从未使用任何pointerreference ?

            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;

linq c#的值为什么会改变

因为TodayInformationYesterdayInformation是同一个引用。您有一个对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;
}