2016-08-31 15 views
0

二重Listのようなdouble for loopを書きたいと思ったら、エラーcannot be assigned to it is read onlyを投げたのですが、それを修正する方法は? PositionListは非常に複雑です)ところで、linqを使用してListを変更する簡単な方法はありますか?ここで double forループの値を変更するかlinqを使用

for (int i = 0; i < PositionList.Count - 1; i++) 
{ 
    for (int j = 0; j < PositionList[i].Count; j++) 
    { 
     if (Math.Abs(PositionList[i][j].DesignPosition - PositionList[i][j].Position) < T) 
     { 
      PositionList[i][j].DesignPosition = PositionList[i][j].Position; 
      PositionList[i + 1][j].Position = PositionList[i][j].DesignPosition; 
     } 
    } 
} 

PositionListpairListAddTwoList存在しているリストのためのコードです:限りオブジェクトを更新するためにLINQを使用するように

var PositionList = pairList.GroupBy(o => o.pair.Item1.Date) 
       .Select(o => 
       { 
        int Position = 0; 
        var SumPosition = AddTwoList.GroupBy(p => p.Key) 
               .Select(p => new {      
                DesignPosition = p.Sum(q => q.DesignPosition), 
                Position      
               }).ToList(); 
        return SumPosition; 
       }).ToList(); 
+1

をPosition'は読み込み専用です(ゲッタはありますが設定子はありません)。値を設定することはできません。すべてのエラーです。 Linqはこれをしません。 – HimBromBeere

+0

'PositionList'のタイプを公開できますか? –

+2

Linqは照会に使用されており、割り当てられていないため、ループは良好です。エラーについては...あなたが変更しようとしているプロパティの1つは読み取り専用です...だから変更してください –

答えて

1

  1. を - LINQがためのものですあなたはifステートメントで新しいオブジェクトを作成しない限り、linqは方向性ではありません。
  2. cannot be assigned to it is read onlyのエラーについて - 使用しているオブジェクトのコレクションはlinqによって生成され、匿名型のコレクションです。 匿名タイプのプロパティはread-onlyで、エラーを説明しています。

解決する最も簡単な方法は、クラスを作成することであり、あなたのLINQではなく、匿名型のそれのインスタンス初期化されますことを、あなたのLINQのロジックに行かなくても: `DesignPosition`または`いずれかの場合

public class YourClass 
{ 
    public int Position { get; set; } 
    public int DesignPosition { get; set; } 
} 

var PositionList = pairList.GroupBy(o => o.pair.Item1.Date) 
          .Select(o => AddTwoList.GroupBy(p => p.Key) 
                .Select(p => new YourClass {      
                 DesignPosition = p.Sum(q => q.DesignPosition), 
                 Position = 0     
                }).ToList()) 
          .ToList(); 

for (int i = 0; i < PositionList.Count - 1; i++) 
{ 
    for (int j = 0; j < PositionList[i].Count; j++) 
    { 
     if (Math.Abs(PositionList[i][j].DesignPosition - PositionList[i][j].Position) < T) 
     { 
      PositionList[i][j].DesignPosition = PositionList[i][j].Position; 
      PositionList[i + 1][j].Position = PositionList[i][j].DesignPosition; 
     } 
    } 
} 
+0

@ user6703592 - これはあなたを助けましたか? –

+0

@ Gilad Green本当にありがとうございますが、実際には、 'PositionList'には多くの匿名型が含まれていますので、新しいクラスを作成しなくても新しい変数を作成することができます。実際には、私は新しいクラスのプログラム全体を避けようとします。 – user6703592

+0

@ user6703592 - _私は新しいクラスを避けようとしています_このアプローチは間違っています....なぜあなたはクラスを持っているのではなく、厳密に型付けされた言語でプログラムするのを避けるのですか?.. –

関連する問題