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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.7173 の関連記事表示

<< 0 >>
■7173  コレクションに格納した構造体の編集について
□投稿者/ まさ -(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
親記事 /過去ログ18より / 関連記事表示
削除チェック/

■7174  Re[1]: コレクションに格納した構造体の編集について
□投稿者/ επιστημη -(2007/08/31(Fri) 14:59:57)
>
    > コレクションに格納した構造体の変数は後で編集することは出来ないのでしょうか?

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

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

    ---- 引用 ----
    列挙子オブジェクトの Current プロパティは ReadOnly です。各コレクション要素のローカル コピーを返します。これは、For Each...Next ループで要素自体を変更することはできないということを意味します。変更は、Current からのローカル コピーにだけ適用され、コレクションに反映されることはありません。
記事No.7173 のレス /過去ログ18より / 関連記事表示
削除チェック/

■7177  Re[2]: コレクションに格納した構造体の編集について
□投稿者/ まさ -(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などのコントロールを格納した場合には できるのに どうして?
    どこか コードが間違ってたのかと思っておりました

    ありがとうございました
記事No.7173 のレス / END /過去ログ18より / 関連記事表示
削除チェック/

■7182  Re[3]: コレクションに格納した構造体の編集について
□投稿者/ Hongliang -(2007/08/31(Fri) 15:56:00)
>
    うにゃ?
    列挙された要素と、その要素の各メンバとは分けないといけませんね。
    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 はどうなっているでしょうか?
記事No.7173 のレス /過去ログ18より / 関連記事表示
削除チェック/

■7369  Re[4]: コレクションに格納した構造体の編集について
□投稿者/ まさ -(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 さん ありがとうございます

    なんとなく解ったような気がします
記事No.7173 のレス /過去ログ18より / 関連記事表示
削除チェック/

■7218  Re[1]: コレクションに格納した構造体の編集について
□投稿者/ Jitta -(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) ' こうする
記事No.7173 のレス /過去ログ18より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -