Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 使用变量值从自定义类名创建新对象?_Vb.net_Visual Studio 2012 - Fatal编程技术网

Vb.net 使用变量值从自定义类名创建新对象?

Vb.net 使用变量值从自定义类名创建新对象?,vb.net,visual-studio-2012,Vb.net,Visual Studio 2012,我正在制作一个列表来组织和操作表示电子表格中线条的数组。我已经为数组创建了一个自定义类,并将它们作为对象调用 我的问题是,我可以使用存储在变量中的值作为对象的名称吗?如果是这样,语法会是什么样子 dim FileName as String FileName = 123456.csv Public Class List_Array public variable1 as string public variable2 as string public variable3

我正在制作一个列表来组织和操作表示电子表格中线条的数组。我已经为数组创建了一个自定义类,并将它们作为对象调用

我的问题是,我可以使用存储在变量中的值作为对象的名称吗?如果是这样,语法会是什么样子

dim FileName as String
FileName = 123456.csv

Public Class List_Array
    public variable1 as string
    public variable2 as string
    public variable3 as string
    public variable4 as string
    End Class

dim File_Name as List_Array = NEW List_Array
这是我理解的编码,但我一直认为这只会一次又一次地创建一个与字符串变量同名的对象


如果没有,如何区分我所称的不同对象?将有数千个对象要引用,因此使用未命名对象将无法很好地工作

如果要存储命名对象的列表,则需要一个<代码>字典对象存储键/值对列表。在本例中,“键”是要指定给对象的名称,值是对对象本身的引用。它是一个泛型类,这意味着当您使用
字典
类型时,必须指定希望它用于键和值的类型。例如,
Dictionary(属于String,MyClass)
将创建一个列表,该列表使用
String
对象作为其键,使用
MyClass
对象作为其值

下面是一个示例,说明了如何使用字典存储具有年龄的人员列表:

Dim d As New Dictionary(Of String, Integer)()
d("Bob") = 30
d("Mary") = 42
然后,当您想要读取一个值时,您可以这样做:

Dim age As Integer = d("Bob")
Public Class Person
    Public Property Id As String
    Public Property Name As String
    Public Property Title As String
End Class
Public Function ParseCsvLine(line As String) As String()
    ' ...
End Function
Dim persons As New List(Of Person)()
For Each line As String In File.ReadAllLines("People.csv")
    Dim fields() As String = ParseCsvLine(line)        
    Dim person As New Person()
    person.Id = fields(0)
    person.Name = fields(1)
    person.Title = fields(2)
    persons.Add(person)
Next
Dim persons As New Dictionary(Of String, Person)()
For Each line As String In File.ReadAllLines("People.csv")
    Dim fields() As String = ParseCsvLine(line)        
    Dim person As New Person()
    person.Id = fields(0)
    person.Name = fields(1)
    person.Title = fields(2)
    persons(person.Id) = person
Next
Dim person100 As Person = persons("100")
字典
只允许每个键使用一项。它使用一个哈希表按值的键对值进行索引,因此它可以非常快速地按键获取任何项

编辑 根据你下面的评论,这里有一个更相关的例子来说明我的意思。假设您有一个包含人员列表的CSV文件。因此,您创建一个类来存储关于一个人的所有信息(CSV文件的一行),如下所示:

Dim age As Integer = d("Bob")
Public Class Person
    Public Property Id As String
    Public Property Name As String
    Public Property Title As String
End Class
Public Function ParseCsvLine(line As String) As String()
    ' ...
End Function
Dim persons As New List(Of Person)()
For Each line As String In File.ReadAllLines("People.csv")
    Dim fields() As String = ParseCsvLine(line)        
    Dim person As New Person()
    person.Id = fields(0)
    person.Name = fields(1)
    person.Title = fields(2)
    persons.Add(person)
Next
Dim persons As New Dictionary(Of String, Person)()
For Each line As String In File.ReadAllLines("People.csv")
    Dim fields() As String = ParseCsvLine(line)        
    Dim person As New Person()
    person.Id = fields(0)
    person.Name = fields(1)
    person.Title = fields(2)
    persons(person.Id) = person
Next
Dim person100 As Person = persons("100")
然后,创建一个方法,解析CSV文件中的一行,并将该行中的所有字段作为字符串数组返回,如下所示:

Dim age As Integer = d("Bob")
Public Class Person
    Public Property Id As String
    Public Property Name As String
    Public Property Title As String
End Class
Public Function ParseCsvLine(line As String) As String()
    ' ...
End Function
Dim persons As New List(Of Person)()
For Each line As String In File.ReadAllLines("People.csv")
    Dim fields() As String = ParseCsvLine(line)        
    Dim person As New Person()
    person.Id = fields(0)
    person.Name = fields(1)
    person.Title = fields(2)
    persons.Add(person)
Next
Dim persons As New Dictionary(Of String, Person)()
For Each line As String In File.ReadAllLines("People.csv")
    Dim fields() As String = ParseCsvLine(line)        
    Dim person As New Person()
    person.Id = fields(0)
    person.Name = fields(1)
    person.Title = fields(2)
    persons(person.Id) = person
Next
Dim person100 As Person = persons("100")
然后,您可以将所有人员加载到列表中,如下所示:

Dim age As Integer = d("Bob")
Public Class Person
    Public Property Id As String
    Public Property Name As String
    Public Property Title As String
End Class
Public Function ParseCsvLine(line As String) As String()
    ' ...
End Function
Dim persons As New List(Of Person)()
For Each line As String In File.ReadAllLines("People.csv")
    Dim fields() As String = ParseCsvLine(line)        
    Dim person As New Person()
    person.Id = fields(0)
    person.Name = fields(1)
    person.Title = fields(2)
    persons.Add(person)
Next
Dim persons As New Dictionary(Of String, Person)()
For Each line As String In File.ReadAllLines("People.csv")
    Dim fields() As String = ParseCsvLine(line)        
    Dim person As New Person()
    person.Id = fields(0)
    person.Name = fields(1)
    person.Title = fields(2)
    persons(person.Id) = person
Next
Dim person100 As Person = persons("100")
现在您将所有
Person
对象加载到一个列表中。但是,问题是列表没有索引。例如,如果您需要查找ID为
100
的人员,则需要遍历列表中的所有
person
对象,直到在其
ID
属性中找到一个具有该值的对象。如果您想按ID对它们进行索引,以便更容易/快速地找到它们,您可以使用
字典
,如下所示:

Dim age As Integer = d("Bob")
Public Class Person
    Public Property Id As String
    Public Property Name As String
    Public Property Title As String
End Class
Public Function ParseCsvLine(line As String) As String()
    ' ...
End Function
Dim persons As New List(Of Person)()
For Each line As String In File.ReadAllLines("People.csv")
    Dim fields() As String = ParseCsvLine(line)        
    Dim person As New Person()
    person.Id = fields(0)
    person.Name = fields(1)
    person.Title = fields(2)
    persons.Add(person)
Next
Dim persons As New Dictionary(Of String, Person)()
For Each line As String In File.ReadAllLines("People.csv")
    Dim fields() As String = ParseCsvLine(line)        
    Dim person As New Person()
    person.Id = fields(0)
    person.Name = fields(1)
    person.Title = fields(2)
    persons(person.Id) = person
Next
Dim person100 As Person = persons("100")
然后,当您需要从字典中找到一个人时,您可以通过ID轻松访问它,如下所示:

Dim age As Integer = d("Bob")
Public Class Person
    Public Property Id As String
    Public Property Name As String
    Public Property Title As String
End Class
Public Function ParseCsvLine(line As String) As String()
    ' ...
End Function
Dim persons As New List(Of Person)()
For Each line As String In File.ReadAllLines("People.csv")
    Dim fields() As String = ParseCsvLine(line)        
    Dim person As New Person()
    person.Id = fields(0)
    person.Name = fields(1)
    person.Title = fields(2)
    persons.Add(person)
Next
Dim persons As New Dictionary(Of String, Person)()
For Each line As String In File.ReadAllLines("People.csv")
    Dim fields() As String = ParseCsvLine(line)        
    Dim person As New Person()
    person.Id = fields(0)
    person.Name = fields(1)
    person.Title = fields(2)
    persons(person.Id) = person
Next
Dim person100 As Person = persons("100")

谢谢你的回答。我的问题在于,类中的每个对象都有20个以上的附加变量,所以我认为字典无法提供帮助。每个对象都是一个20个元素的数组,我不确定如何命名这些对象,然后使用LIST函数高效地引用这些对象。这很好。您仍然可以使用该类作为字典的值类型。字典不关心值的类型。它可以是任何复杂的任何类型。或者你是说你不想让它包含那么多变量?我必须在存储值后对它们进行操作和排序。我认为需要将对象/数组存储在一个列表中,对象名称是我需要能够排序的项。你完全失去了我。我真的不知道你想做什么。对的确,你需要一个列表,某种形式的项目,然后才能对所说的列表进行排序,但我不确定这与我们正在谈论的有什么关系。如果字典中存储了所有对象,则可以随时查询字典以生成列表并对其进行排序。您可以同时使用一百个不同的字典、一百个不同的列表、一百个不同的控件、一百个不同的属性和变量引用相同的对象。变量名不是对象的名称。它只是一个句柄,用于引用对象。如果我说
Dim x As New MyClass
,然后我说
Dim y As MyClass=x
,我现在有两个变量(
x
y
),但它们都指向完全相同的对象。如果我通过
x
更改了其中一个属性的值,例如
x.variable1=“test”
,那么它也会将其更改为
y
<代码>y
不会更改,因为该值会同时复制到这两个位置
y
更改,因为
x
y
都指向相同的内存位置。它们是同一对象的两个不同“名称”。