2016-09-07 73 views
0

轻松地说,为什么这两个qqq是在断点不同? TodayInformationYesterdayInformation其实都是类型List<MyClass>LINQ C#为什么价值变动

这是非常奇怪的是,作为平时,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; 
+1

我不确定你在这里问什么。请澄清 – Kenneth

回答

1

由于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,将数据加载到一个匿名对象,而无需修改原始项目,并设置结果列表变成一个变量。

+0

@ Danny Chen是否意味着在C#中每个'='都使用'reference'不喜欢C++中的'='? – user6703592

+0

这取决于。如果引用类型为“a = b”,则分配引用。对于值类型,'='复制值。 –

+0

'TodayInformation'和'YesterdayInformation'实际上是'List '的类型'所以它们是引用类型? – user6703592

0

我不完全确定你在说什么或问,但代码原型基本上是一个循环更新项目。

这将更清晰,并且等同于您的代码。

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; 
}