このコードが一連の型のメンバー変数を変更しない理由が完全にわかりません。
for p in prescrs do
p.ATC <- "A"
for c in p.Drug.Components do
for s in c.Substances do
s.DoseTotal.Adjust <- adjustKg
s.DoseTotal.Time <- "DAY"
s.DoseTotal.Unit <- s.DrugConcentration.Unit
s.DoseRate.Adjust <- adjustKg
s.DoseRate.Time <- "DAY"
s.DoseRate.Unit <- s.DrugConcentration.Unit
prescrs は、メンバー値を持つタイプとして定義された非常に単純な「POCO」である処方のシーケンスです。これがうまくいかない理由がわかりません。
次のような簡単なテストケースを試しました:
type IterTest () =
member val Name = "" with get, set
member val IterTests = [] |> List.toSeq : IterTest seq with get, set
let iterseq =
[
new IterTest(Name = "Test1")
new IterTest(Name = "Test2")
]
|> List.toSeq
iterseq |> Seq.iter(fun x -> x.IterTests <- iterseq)
iterseq |> Seq.iter(fun x ->
x.IterTests
|> Seq.iter(fun x' -> x'.Name <- "itered"))
しかし、ここでの結果は予想どおりです。それで、私の問題を完全に再現することさえできませんか???
解決策を見つけました(上記の問題を本当に理解していません)。最初に prescrs シーケンスを次のようなリストに変換すると:
let prescrs = prescrs |> Seq.toList
次に、命令型ループを実行すると、プロパティが変更されます。