C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: コレクションに格納した構造体の編集について


(過去ログ 18 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■7173 / inTopicNo.1)  コレクションに格納した構造体の編集について
  
□投稿者/ まさ (6回)-(2007/08/31(Fri) 14:49:54)

分類:[.NET 全般] 

2007/08/31(Fri) 14:50:21 編集(投稿者)

コレクションに格納した構造体について お聞きしたいのですが
今まで 構造体自体をあまり使わなかったのですが 使ってみると 不思議な事がありまして
質問させていただきます

簡単に下のようなコードを書いてみました
1つ目のForで testという構造体の変数aa に0〜5までの数値を代入してから コレクションaryに追加してから
次の For Eachでコレクションaryのなかの testの変数aaの値を全て10に変えているつもりなのですが
最後のmsgboxでは 最初の0〜5の数字が出ます

コレクションに格納した構造体の変数は後で編集することは出来ないのでしょうか?



Structure test
Dim aa As Integer
End Structure

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim ary As New ArrayList
For i As Integer = 0 To 5
Dim tt As New test
tt.aa = i
ary.Add(tt)
Next

For Each i As test In ary
i.aa = 10
Next

For Each i As test In ary
MsgBox(i.aa)
Next
End Sub
引用返信 編集キー/
■7174 / inTopicNo.2)  Re[1]: コレクションに格納した構造体の編集について
□投稿者/ επιστημη (577回)-(2007/08/31(Fri) 14:59:57)
επιστημη さんの Web サイト
> コレクションに格納した構造体の変数は後で編集することは出来ないのでしょうか?

"For Eachでは" 変更できません。

http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vbcn7/html/vaconusingforeach.asp

---- 引用 ----
列挙子オブジェクトの Current プロパティは ReadOnly です。各コレクション要素のローカル コピーを返します。これは、For Each...Next ループで要素自体を変更することはできないということを意味します。変更は、Current からのローカル コピーにだけ適用され、コレクションに反映されることはありません。

引用返信 編集キー/
■7177 / inTopicNo.3)  Re[2]: コレクションに格納した構造体の編集について
□投稿者/ まさ (7回)-(2007/08/31(Fri) 15:22:30)
No7174 (επιστημη さん) に返信
>>コレクションに格納した構造体の変数は後で編集することは出来ないのでしょうか?
>
> "For Eachでは" 変更できません。
>
> http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vbcn7/html/vaconusingforeach.asp
>
> ---- 引用 ----
> 列挙子オブジェクトの Current プロパティは ReadOnly です。各コレクション要素のローカル コピーを返します。これは、For Each...Next ループで要素自体を変更することはできないということを意味します。変更は、Current からのローカル コピーにだけ適用され、コレクションに反映されることはありません。
>

なるほど 了解致しました
labelやtextboxなどのコントロールを格納した場合には できるのに どうして?
どこか コードが間違ってたのかと思っておりました

ありがとうございました
解決済み
引用返信 編集キー/
■7182 / inTopicNo.4)  Re[3]: コレクションに格納した構造体の編集について
□投稿者/ Hongliang (181回)-(2007/08/31(Fri) 15:56:00)
Hongliang さんの Web サイト
うにゃ?
列挙された要素と、その要素の各メンバとは分けないといけませんね。
ReadOnly なのは列挙された要素の方。要素のメンバは別に ReadOnly ではありません。

For Each t As TextBox in textBoxCollections
t = New TextBox() ' t は ReadOnly なのでこれは無理
t.Text = "Text" ' メンバは ReadOnly では無いのでこれは可能
Next

さて、構造体とクラスの違いを考えたことはありますか?
ClassA クラスと StructA 構造体があり、どちらも Id という Integer なメンバを持つとします。

Dim ca As New ClassA()
Dim cb As ClassA = ca
cb.Id = 10
と、
Dim sa As New StructA()
Dim sb As StructA = sa
sb.Id = 10
としたとき、ca.Id と sa.Id はどうなっているでしょうか?
引用返信 編集キー/
■7218 / inTopicNo.5)  Re[1]: コレクションに格納した構造体の編集について
□投稿者/ Jitta (417回)-(2007/08/31(Fri) 21:50:42)
No7173 (まさ さん) に返信
> コレクションに格納した構造体の変数は後で編集することは出来ないのでしょうか?
「できませんよ」って、警告が出ていませんでしたか?

同じ理由で、Form.Size.Height, Width も、変更できません。

Dim frm As New Form
frm.Size.Height = 800 ' これはできない
frm.Size = New Size(frm.Size.Width, 800) ' こうする

引用返信 編集キー/
■7369 / inTopicNo.6)  Re[4]: コレクションに格納した構造体の編集について
□投稿者/ まさ (8回)-(2007/09/04(Tue) 17:28:54)
No7182 (Hongliang さん) に返信

> さて、構造体とクラスの違いを考えたことはありますか?
> ClassA クラスと StructA 構造体があり、どちらも Id という Integer なメンバを持つとします。
>
> Dim ca As New ClassA()
> Dim cb As ClassA = ca
> cb.Id = 10
> と、
> Dim sa As New StructA()
> Dim sb As StructA = sa
> sb.Id = 10
> としたとき、ca.Id と sa.Id はどうなっているでしょうか?

Hongliang さん ありがとうございます

なんとなく解ったような気がします
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -