2016-09-07 69 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; 
}