Mr.Tの場所

特攻野郎Aチームじゃないよー

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  181  : 記事  0  : コメント  760  : トラックバック  37

ニュース

  • 性別:男
  • 猫1:まる
  • 猫2:もろ
  • 猫3:にゃん左部郎
  • タバコ:男は黙ってJPS
[わんくま同盟] C#, VB.NET 掲示板
フィードメーター - Mr.Tの場所

書庫

日記カテゴリ

Mr.Tです、こんにちは。

こことか、こことか、みたときに、そういやなぁ...と思った。

Private _srcParameter As New List(Of String)
Private _dstParameter As New List(Of String)

Sub Main()


    Dim targetParameter As New List(Of String)

    targetParameter.Add("朝日のあたる家")
    targetParameter.Add("グインサーガ")
    targetParameter.Add("伊集院大介の冒険")
    _srcParameter = targetParameter

    TitlePrint(_srcParameter)

    targetParameter.Clear()

    targetParameter.Add("おにぎり")
    targetParameter.Add("のりまき")
    targetParameter.Add("こーんすたーち")
    _dstParameter = targetParameter

    ItemPrint(_dstParameter)

    Console.WriteLine("=====================================")

    For Each sItem As String In _srcParameter
        Console.WriteLine("手元にある本:" & sItem)
    Next

    For Each sitem As String In _dstParameter
        Console.WriteLine("買い物リスト:" & sitem)
    Next

End Sub

Private Sub TitlePrint(ByVal sList As List(Of String))
    For Each sItem As String In sList
        Console.WriteLine("手元にある本:" & sItem)
    Next
End Sub

Private Sub ItemPrint(ByVal sList As List(Of String))
    For Each sitem As String In sList
        Console.WriteLine("買い物リスト:" & sitem)
    Next
End Sub

あれぇ、どうしてだろうと思った時、それが値なのか、参照なのか、を意識していない。

投稿日時 : 2008年2月20日 13:14

コメント

# re: 値と参照を知らない(Clearメソッドで、失敗する) 2008/02/20 14:36 myugaru
こんにちは!リンクいただいたのでコメントしにきました!

> _srcParameter = targetParameter

これをしている時点で一番最初にある

> Private _srcParameter As New List(Of String)

この最初のNewが不要なんです。Listは参照なので値の器を作る必要がないのです。意識する利点はこの最初の2行のNewが余計なコードだって気が付く・・・ってくらいですかねえ・・・なんか弱いですね(爆^^;;;

#FULL MIKU PLAYERのところでMr.Tさんのお名前みかけたのですがお声掛けそびれました。すみません^^;;

# re: 値と参照を知らない(Clearメソッドで、失敗する) 2008/02/20 14:38 myugaru
あ、宣言するときにVBってNew必須でしたっけ?C#erなものでVBの文法までは突っ込めなかったかもです><;

# re: 値と参照を知らない(Clearメソッドで、失敗する) 2008/02/20 14:52 まさる
一度は通る道ですね。

# re: 値と参照を知らない(Clearメソッドで、失敗する) 2008/02/20 15:18 Mr.T
myugaruさん:
コメントありがとうございます。

んーと、宣言を強制させている、と前提しますね。
そんときは、
Private Hoge as List(of String) = new List(of String)
とするか、
Private Hoge as new List(of String)
もしくは
Private Hoge as List(of String)
Hoge = new List(of String)

と書きます。
型推論があると
Dim hoge = New List(Of String)
でもいけます。

とりあえず、VBでNewは必須ですね。


# re: 値と参照を知らない(Clearメソッドで、失敗する) 2008/02/20 15:29 Mr.T
元ネタの話には、ついていってない人ですが、

Listは参照なので、
別の変数 = Listの変数
としても、値をコピーしてくれるわけじゃあなく、
List内容を参照する変数が一つ増えただけに
すぎないわけですよね。

「こんなところで同じような変数定義するのもったいないから」とかで
Clear()とかやっちゃって、再利用しようとして
結果、「アレ?」という話です。
ただ、それだけです(^^;


# re: 値と参照を知らない(Clearメソッドで、失敗する) 2008/02/20 15:32 Mr.T
まさるさん:
何度でもそういう落とし穴の前にはさしかかるんだけど、落ちなくなった人と、やっぱり落ちちゃう人が
いるのかなぁと。


# re: 値と参照を知らない(Clearメソッドで、失敗する) 2008/02/20 15:48 myugaru
>Mr.Tさん
>とりあえず、VBでNewは必須ですね。

やっぱりそうなんだぁ。これを気に時々はVBもいじっちゃおうと思います。

# re: 値と参照を知らない(Clearメソッドで、失敗する) 2008/02/20 15:57 とりこびと
myugaruさんの

>宣言するときにVBってNew必須でしたっけ?

なんの宣言なのかが分からなかったのですが、もし変数宣言ってことでしたらそれ自体にNewは必須ではないのでは?




# re: 値と参照を知らない(Clearメソッドで、失敗する) 2008/02/20 17:23 Mr.T
とりこびとさん:
>なんの宣言なのかが分からなかったのですが、

ええ、私もそこを突っ込もうかと思いましたが、
わざとぼかしておいたままでふ。

とりあえず変数を宣言するならNewはいりませんが、
List宣言したものをListとして利用するには
New List(of String)か、他の参照を渡すかのどちらかですよね。

Newを必須と書いたのは、
Private Hoge as List(of T)
Hoge.add("ついかです")

とはかけませんぜ、という意味くらいにとってください(^^;



# re: 値と参照を知らない(Clearメソッドで、失敗する) 2008/02/20 18:10 とりこびと
myugaruさんはおそらく

>New List(of String)か、他の参照を渡すかのどちらか

ということはご存知でいて、かつ本文中の

Private _srcParameter As New List(Of String)
Private _dstParameter As New List(Of String)

の「New」は要らないですよね~ってことをおっしゃりたかったのか、

と読んだんですけど・・・。

Mr.Tさんのエントリの内容の意図するところと、myugaruさんの目にとまった部分がすれちがっちゃったのかな・・・。

# re: 値と参照を知らない(Clearメソッドで、失敗する) 2008/02/20 19:23 Mr.T
ああ、なるほど、そういうことか。
ようやく今わかった(^^;

_srcParameterは、targetPrameterから参照を
コピーされるわけだから、Newいらないですね。

というか、New必須って書いちゃったのがまずかった。すみません、まぎらわしいこと書いてしまって。



# re: 値と参照を知らない(Clearメソッドで、失敗する) 2008/02/20 19:25 Mr.T
myuguraさんがおそらくC系の人だから、VBの文法まで詳しくないのかな、と勝手に思っちゃったのが原因ですな。

# re: 値と参照を知らない(Clearメソッドで、失敗する) 2008/02/21 14:48 とりこびと
とりこびっちは空気が読める子!w

# re: 値と参照を知らない(Clearメソッドで、失敗する) 2008/02/21 17:37 Mr.T
やべ、KYといわれてしまいそうだ...orz

# re: 値と参照を知らない(Clearメソッドで、失敗する) 2008/02/21 22:53 myugaru
あああ、すみません。
VBはほぼ分からない人です自分。
色々勉強になります。もっと私いぢめてくださいね(大きく違ry

# re: 値と参照を知らない(Clearメソッドで、失敗する) 2008/02/21 22:55 myugaru
To とりこびとさん
私もそんな風にかゆいところへ手の届く人になりたいです(ぽっ

Post Feedback

タイトル
名前
Url:
コメント