vb.net 辞書オブジェクト、構造インスタンスはパラメータで構築され、一時変数は必要ありません

  dict.Add("Tom", New Person())
         dict.Add("John", New Person With {.Age = 25})
        dict.Add("Jane", New Person With {.Name = "Jane", .Age = 30})

辞書内のデータは構造体なので、辞書キーを追加し、一時変数を使用せずに直接パラメータに値を代入します。

ディクショナリの値が構造体型の場合、一時変数を使用せずにパラメータに値を直接割り当てることができます。以下に例を示します。 @code
上の例では、2 つのメンバー変数 Name と Age を持つ Person という名前の構造体タイプを定義しました。次に、キーの型が String、値の型が Person である辞書オブジェクト dict を作成しました。

ディクショナリのキーと値のペアを追加するときは、パラメーター内で New Person を直接使用して Person 構造体のインスタンスを作成し、オブジェクト初期化子を通じてそのメンバー変数に値を割り当てます。これにより、一時変数を使用せずに、構造体のインスタンスを値としてディクショナリの Add メソッドに直接渡すことができます。

最後に、キーによって辞書内の値にアクセスし、Console.WriteLine を使用してコンソールに値を出力します。
構造内のパラメータは、入力する値を少なくしても、しなくても構いません。

Module Module1
    Structure Person
        Public Name As String
        Public Age As Integer
    End Structure

    Sub Main()
        Dim dict As New Dictionary(Of String, Person)()

        ' 直接在参数中赋值
         dict.Add("Tom", New Person())
         dict.Add("John", New Person With {.Age = 25})
        dict.Add("Jane", New Person With {.Name = "Jane", .Age = 30})

        ' 访问字典中的值
        Console.WriteLine("Name: " & dict("John").Name & ", Age: " & dict("John").Age)
        Console.WriteLine("Name: " & dict("Jane").Name & ", Age: " & dict("Jane").Age)

        Console.ReadLine()
    End Sub
End Module

質問: 構造体のデータは直接変更できません。パブリック クラスが辞書のデータとして使用されている場合、変更できますか? パブリック クラスは構造体より多くのメモリと CPU オーバーヘッドを消費しますか?

はい、構造体のデータは値型であり、その中の属性値を直接変更することはできず、コピーを作成し、そのコピーを変更することで実現する必要があります。publicクラスは参照型であり、その中の属性値を直接変更できます。

パブリッククラスを辞書のデータとして使用すると、コピーを作成せずにその中の属性値を直接変更できます。以下に例を示します。
この例では、パブリック クラス Person を作成し、それを辞書の値の型にしました。次に、辞書内の「John」キーに対応するパブリック クラス オブジェクトの Age 属性値を 30 に直接変更します。このようにして、辞書内のパブリック クラス オブジェクトの属性値を直接変更することができます。

メモリと CPU オーバーヘッドの問題に関しては、パブリック クラスは通常、構造体と比較してより多くのメモリと CPU オーバーヘッドを占有します。これは、パブリック クラスが参照型であり、そのインスタンスがヒープ上に割り当てられ、参照を保存するために追加のメモリが必要になるためです。構造体は値型であり、そのインスタンスはスタック上に割り当てられるため、参照を保存するために追加のメモリは必要ありません。

ただし、正確なメモリと CPU オーバーヘッドは、実際の使用量とデータ量によって異なります。場合によっては、特に構造体のデータ サイズが小さく、頻繁に渡したりコピーしたりする必要がある場合には、構造体を使用した方が効率的である場合があります。また、特にデータを変更する必要がある場合には、パブリック クラスを使用した方が柔軟で便利な場合もあります。

したがって、構造体またはパブリック クラスの使用を選択する場合は、特定のニーズとパフォーマンス要件に基づいてトレードオフと選択を行う必要があります。

Class Person
    Public Name As String
    Public Age As Integer
    ' 其他属性...
End Class

Sub Main()
    Dim dict As New Dictionary(Of String, Person)()

    ' 添加公用类对象到字典
    dict.Add("John", New Person With {.Name = "John", .Age = 25})

    ' 直接修改属性值
    dict("John").Age = 30

    ' 输出修改后的属性值
    Console.WriteLine("Name: " & dict("John").Name)
    Console.WriteLine("Age: " & dict("John").Age)

    Console.ReadLine()
End Sub

おすすめ

転載: blog.csdn.net/xiaoyao961/article/details/135366022