vb.net字典对象,参数中构造结构实例,不需要临时变量

2024-01-08 02:11:04
  dict.Add("Tom", New Person())
         dict.Add("John", New Person With {.Age = 25})
        dict.Add("Jane", New Person With {.Name = "Jane", .Age = 30})

字典里面的数据是结构,添加一个字典键,直接在参数中赋值而不用临时变量做个示例

当字典的值是结构类型时,可以直接在参数中赋值而不使用临时变量。以下是一个示例:@code
在上面的示例中,我们定义了一个名为Person的结构类型,它有两个成员变量Name和Age。然后,我们创建了一个字典对象dict,键的类型是String,值的类型是Person。

在添加字典键值对时,我们直接在参数中使用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开销?

是的,结构的数据是值类型,无法直接修改其中的属性值,而是需要通过创建副本并修改副本的方式来实现。而公用类是引用类型,可以直接修改其中的属性值。

使用公用类作为字典的数据,可以直接修改其中的属性值,而不需要创建副本。以下是一个示例:
在示例中,我们创建了一个公用类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

文章来源:https://blog.csdn.net/xiaoyao961/article/details/135366022
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。