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

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

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

Re[3]: ジェネリックリストについて


(過去ログ 46 を表示中)

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

■24887 / inTopicNo.1)  ジェネリックリストについて
  
□投稿者/ tono (1回)-(2008/09/11(Thu) 17:38:28)

分類:[.NET 全般] 

VB2008 Express Edition

以下のように、ジェネリックリストにstring配列を定義しているのですが
思った結果が得られません。どこがおかしいのでしょうか?

<Debug.Printにて実際に出力される値>
bbb1
bbb2
bbb3
bbb1
bbb2
bbb3

<予想していた値>
aaa1
aaa2
aaa3
bbb1
bbb2
bbb3

<以下、コードです>
Dim mData(3) As String
Dim mLstData As New List(Of String())
Dim mData2() As String

mData(0) = "aaa1"
mData(1) = "aaa2"
mData(2) = "aaa3"
mLstData.Add(mData)

mData(0) = "bbb1"
mData(1) = "bbb2"
mData(2) = "bbb3"
mLstData.Add(mData)

For i As Integer = 0 To mLstData.Count - 1
mData2 = mLstData(i)
Debug.Print(mData2(0))
Debug.Print(mData2(1))
Debug.Print(mData2(2))
Next

以上、宜しくお願いいたします。
引用返信 編集キー/
■24888 / inTopicNo.2)  Re[1]: ジェネリックリストについて
□投稿者/ επιστημη (1313回)-(2008/09/11(Thu) 17:45:47)
επιστημη さんの Web サイト
> 以下のように、ジェネリックリストにstring配列を定義しているのですが
> 思った結果が得られません。どこがおかしいのでしょうか?

ListにAddされたとき、「コピーが作られない」からです。

引用返信 編集キー/
■24889 / inTopicNo.3)  Re[2]: ジェネリックリストについて
□投稿者/ tono (2回)-(2008/09/11(Thu) 17:56:23)
No24888 (επιστημη さん) に返信
>>以下のように、ジェネリックリストにstring配列を定義しているのですが
>>思った結果が得られません。どこがおかしいのでしょうか?
>
> ListにAddされたとき、「コピーが作られない」からです。
>
返信ありがとうございます。

普通にAddしてもダメということですか。
予想値にするためには、どうすればいいのでしょうか。
私なりに調べましたが全く分かりませんでした。
よければご教授お願い致します。
引用返信 編集キー/
■24891 / inTopicNo.4)  Re[1]: ジェネリックリストについて
□投稿者/ じいおい (5回)-(2008/09/11(Thu) 18:04:45)

mLstData.Add(mData.ToArray)
にして配列のコピーを渡してあげればいいと思います。

引用返信 編集キー/
■24892 / inTopicNo.5)  Re[3]: ジェネリックリストについて
□投稿者/ シャノン (605回)-(2008/09/11(Thu) 18:05:04)
No24889 (tono さん) に返信
> ■No24888 (επιστημη さん) に返信
> >>以下のように、ジェネリックリストにstring配列を定義しているのですが
> >>思った結果が得られません。どこがおかしいのでしょうか?
>>
>>ListにAddされたとき、「コピーが作られない」からです。
>>
> 返信ありがとうございます。
>
> 普通にAddしてもダメということですか。
> 予想値にするためには、どうすればいいのでしょうか。
> 私なりに調べましたが全く分かりませんでした。
> よければご教授お願い致します。

お望みの結果を出すコードをここに書くのは簡単ですが、この問題の根本は「参照型」というものを理解できていないことに原因があります。
それを理解しないまま C# を使い続けることは大変危険です。
「値型と参照型」のようなキーワードで調べて、知識を身につけてください。
引用返信 編集キー/
■24893 / inTopicNo.6)  Re[2]: ジェネリックリストについて
□投稿者/ tono (3回)-(2008/09/11(Thu) 18:06:07)
No24891 (じいおい さん) に返信
>
> mLstData.Add(mData.ToArray)
> にして配列のコピーを渡してあげればいいと思います。
>

できました、ありがとうございました。
解決済み
引用返信 編集キー/
■24894 / inTopicNo.7)  Re[3]: ジェネリックリストについて
□投稿者/ επιστημη (1314回)-(2008/09/11(Thu) 18:09:11)
επιστημη さんの Web サイト
↓ こんなとこでしょか。VBおんちなのでこれがフツーの書き方か自信ないけども。

Imports System.Collections.Generic

Module Module1

Sub Main()
  Dim strlist As New List(Of String())
  Dim strarray As String()

  ReDim strarray(3)
  strarray(0) = "aaa1"
  strarray(1) = "aaa2"
  strarray(2) = "aaa3"
  strlist.Add(strarray)

  ReDim strarray(3)
  strarray(0) = "bbb1"
  strarray(1) = "bbb2"
  strarray(2) = "bbb3"
  strlist.Add(strarray)

  For i As Integer = 0 To strlist.Count - 1
    Dim tmp() As String = strlist(i)
    Console.WriteLine(tmp(0))
    Console.WriteLine(tmp(1))
    Console.WriteLine(tmp(2))
  Next

End Sub

End Module

引用返信 編集キー/
■24895 / inTopicNo.8)  Re[4]: ジェネリックリストについて
□投稿者/ tono (4回)-(2008/09/11(Thu) 18:09:27)
No24892 (シャノン さん) に返信
> ■No24889 (tono さん) に返信
>>■No24888 (επιστημη さん) に返信
>>>>以下のように、ジェネリックリストにstring配列を定義しているのですが
>>>>思った結果が得られません。どこがおかしいのでしょうか?
> >>
> >>ListにAddされたとき、「コピーが作られない」からです。
> >>
>>返信ありがとうございます。
>>
>>普通にAddしてもダメということですか。
>>予想値にするためには、どうすればいいのでしょうか。
>>私なりに調べましたが全く分かりませんでした。
>>よければご教授お願い致します。
>
> お望みの結果を出すコードをここに書くのは簡単ですが、この問題の根本は「参照型」というものを理解できていないことに原因があります。
> それを理解しないまま C# を使い続けることは大変危険です。
> 「値型と参照型」のようなキーワードで調べて、知識を身につけてください。

おっしゃるとおりです。
調べて、身につけたいと思います。

引用返信 編集キー/
■24897 / inTopicNo.9)  Re[4]: ジェネリックリストについて
□投稿者/ tono (5回)-(2008/09/11(Thu) 18:25:35)
No24894 (επιστημη さん) に返信
> ↓ こんなとこでしょか。VBおんちなのでこれがフツーの書き方か自信ないけども。
>
> Imports System.Collections.Generic
>
> Module Module1
>
> Sub Main()
> Dim strlist As New List(Of String())
> Dim strarray As String()
>
> ReDim strarray(3)
> strarray(0) = "aaa1"
> strarray(1) = "aaa2"
> strarray(2) = "aaa3"
> strlist.Add(strarray)
>
> ReDim strarray(3)
> strarray(0) = "bbb1"
> strarray(1) = "bbb2"
> strarray(2) = "bbb3"
> strlist.Add(strarray)
>
> For i As Integer = 0 To strlist.Count - 1
> Dim tmp() As String = strlist(i)
> Console.WriteLine(tmp(0))
> Console.WriteLine(tmp(1))
> Console.WriteLine(tmp(2))
> Next
>
> End Sub
>
> End Module
>
お手数かけました、ちゃんと予想値が出力されました。
私のは確保していなかったためだったのですね。


解決済み
引用返信 編集キー/
■24901 / inTopicNo.10)  Re[3]: ジェネリックリストについて
□投稿者/ みきぬ (77回)-(2008/09/11(Thu) 19:21:14)
こんなんでました。
# by ReDimは嫌いな人

    Public Shared Sub Main()

        Dim strlist As New List(Of String())

        With Nothing
            Dim strarray(3) As String
            strarray(0) = "aaa1"
            strarray(1) = "aaa2"
            strarray(2) = "aaa3"
            strlist.Add(strarray)
        End With

        With Nothing
            Dim strarray(3) As String
            strarray(0) = "bbb1"
            strarray(1) = "bbb2"
            strarray(2) = "bbb3"
            strlist.Add(strarray)
        End With

        For i As Integer = 0 To strlist.Count - 1
            Dim tmp() As String = strlist(i)
            Console.WriteLine(tmp(0))
            Console.WriteLine(tmp(1))
            Console.WriteLine(tmp(2))
        Next

    End Sub

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -