したがって、たとえばリストから型構造体を取得すると、構造体は可変ではないため、コピーが取得されることを読みました。そうは言っても、変更を加えたい場合は、リスト内の構造体全体を置き換える必要があります。今、私は次のコードで非常に奇妙な動作を経験しました
if pressed then
let ret = rectangles.Item(ret_index)
ret.Offset(loc.X - offs.Width - ret.X, loc.Y - offs.Height - ret.Y)
rectangles.Item(ret_index) <- ret
for i = 0 to couples.Count - 1 do
match couples.Item(i) with
| (idx_s, idx_e, rectf, string) when idx_s = ret_index ||
idx_e = ret_index ->
let mutable r = rectf
let x = (rectangles.Item(idx_e).X + rectangles.Item(idx_s).X) / 2
let y = (rectangles.Item(idx_e).Y + rectangles.Item(idx_s).Y) / 2
r.X <- single x
r.Y <- single y
couples.Item(i) <- (idx_s, idx_e, r, string)
変更可能な Rectangle を定義するのは悪い習慣ですか? (可変構造体は「悪」であると読んだことがあります)今、私の本当の質問:上記のコードは機能するのに、次のコードは機能しないのはなぜですか?
if pressed then
let ret = rectangles.Item(ret_index)
ret.Offset(loc.X - offs.Width - ret.X, loc.Y - offs.Height - ret.Y)
rectangles.Item(ret_index) <- ret
for i = 0 to couples.Count - 1 do
match couples.Item(i) with
| (idx_s, idx_e, rectf, string) when idx_s = ret_index ||
idx_e = ret_index ->
let r = rectf
let x = (rectangles.Item(idx_e).X + rectangles.Item(idx_s).X) / 2
let y = (rectangles.Item(idx_e).Y + rectangles.Item(idx_s).Y) / 2
r.Offset(single x - r.X, single y - r.Y)
couples.Item(i) <- (idx_s, idx_e, r, string)