2016-09-07 3 views
0

簡単に言えば、2つのqqqがブレークポイントで異なるのはなぜですか? TodayInformationYesterdayInformation実際にList<MyClass>linq C#なぜ値が変化する

のように、通常、YesterdayInformationは、この部を介して変更することができなかったことは非常に奇妙であるが、実際にYesterdayInformationは私がpointerまたはreferenceいずれかを使用することはありませんTodayInformationのように更新されるのタイプ?

  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#で '='すべての '参照 'を使用すると、C++の' = 'が好きではないという意味ですか? – user6703592

+0

それは異なります。 'a = b'は参照型であれば参照を代入します。値型の場合、 '='は値をコピーします。 –

+0

'TodayInformation'と' YesterdayInformation'は実際に 'List 'の型ですので、参照型ですか? – user6703592

0

あなたが何を言っているのか尋ねているのか正確にはわかりませんが、as-inのコードは基本的にアイテムを更新するループです。

これは、はるかに明確になり、コードに相当します。

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; 
} 
関連する問題