私は次のc#コードを持っています:
private XElement BuildXmlBlob(string id, Part part, out int counter)
{
// return some unique xml particular to the parameters passed
// remember to increment the counter also before returning.
}
これはによって呼び出されます:
var counter = 0;
result.AddRange(from rec in listOfRecordings
from par in rec.Parts
let id = GetId("mods", rec.CKey + par.UniqueId)
select BuildXmlBlob(id, par, counter));
上記のコードサンプルは、私が達成しようとしていることを象徴しています。
Eric Lippertによると、outキーワードとlinqは混在していません。十分に公平ですが、誰かが上記のリファクタリングを手伝ってくれるので、うまくいきますか?職場の同僚がアキュムレータと集計関数について言及しましたが、私はLinqの初心者であり、グーグル検索は実際の成果を上げていたので、ここで質問したいと思いました:)。
明確にするために:
コードが呼び出されるたびに、パーツの数を数えています。パーツの数はいくつでもかまいません。したがって、BuildXmlBlob()メソッドが呼び出されるたびに、生成される結果のxmlには、「partNumber」を示す一意の要素が含まれます。
つまり、カウンターが現在7になっている場合は、これまでに7番目の部分を処理していることを意味します。つまり、BuildXmlBlob()から返されたXMLには、どこかにカウンター値が埋め込まれています。そのため、BuildXmlBlob()が実行ごとに呼び出されるたびに、パスしてインクリメントする必要があります。