2

次のコード行を検討してください。

  //prodProdGroup is a list within the itm object that I need to search. The items
  //within the list are of type ProductionCostCalcHelper. I need to find one
  //of the ProductionCostCalcHelper records in the list, calculate its total dollar value
  //and assign it the value

  ProductionCostCalcHelper prodGroupItm = itm.prodProdGroup.SingleOrDefault(f => f.MAST_PROJ.Trim() == laborItm.MAST_PROJ.Trim());
  ProductionCostCalcHelper prodGroupItm2 = itm.prodProdGroup.SingleOrDefault(f => f.MAST_PROJ.Trim() == laborItm.MAST_PROJ.Trim());

  if (prodGroupItm != null)
  {
        prodGroupItm.TOTAL_DOLLAR = avgDollarsPerHour * prodGroupItm.HOURS;
  }

SingleOrDefaultメソッドは参照によってオブジェクトを返すと思いますが、そうではありません。ProdGroupItmのTOTAL_DOLLAR量を変更した後も、ProdGroupItm2は同じままであり、リストにあるものを参照していないことを証明します。どうしてこれなの?リスト内のオブジェクトの値を更新する方法はありますか?

4

1 に答える 1

2

これは、ProductionCostCalcHelperタイプが可変である場合に発生しますstruct
それをしないでください; 可変構造体は悪です。

アラウンドを渡すたびstructに、値全体が渡されるものにコピーされます。

代わりにクラスを使用してください。

于 2011-08-03T19:19:25.910 に答える