Vb.net 重命名对象列表中的重复特性条目

Vb.net 重命名对象列表中的重复特性条目,vb.net,list,duplicates,rename,Vb.net,List,Duplicates,Rename,我有一个对象列表,其中每个对象都包含一个字符串属性。这些字符串属性必须是唯一的,所以我尝试向复制的字符串中添加升序数字。首先,我认为它可以帮助我,但它是为列表而不是对象列表,所有试图将代码转换为vb的尝试都没有成功,所以我尝试了另一种方法 Object1.String = "Test" Object2.String = "Test" 应该转化为 Object1.String = "Test" Object2.String = "Test1" 这就是我尝试过的: Module Module1

我有一个对象列表,其中每个对象都包含一个字符串属性。这些字符串属性必须是唯一的,所以我尝试向复制的字符串中添加升序数字。首先,我认为它可以帮助我,但它是为列表而不是对象列表,所有试图将代码转换为vb的尝试都没有成功,所以我尝试了另一种方法

Object1.String = "Test"
Object2.String = "Test" 
应该转化为

Object1.String = "Test"
Object2.String = "Test1"
这就是我尝试过的:

Module Module1

    Sub Main()
        Dim obj1 As New TestCls
        Dim obj2 As New TestCls
        Dim obj3 As New TestCls

        obj1.p1 = "Test"
        obj2.p1 = "Test1"
        obj3.p1 = "Test"

        Dim lstmp As New List(Of TestCls)
        lstmp.Add(obj1)
        lstmp.Add(obj2)
        lstmp.Add(obj3)

        For Each elementA As TestCls In lstmp
            For Each elementB As TestCls In lstmp
                If elementA.p1 = elementB.p1 Then
                    elementB.p1 = elementB.p1 & 1
                End If
            Next
        Next
        Dim i As Integer = 0
    End Sub
End Module

Class TestCls
    Public Property p1 As String
End Class

但是结果是Test1和Test111,而且对于很多对象来说更加混乱。有谁能帮我吗?

你必须增加它,而不是总是连接1。我会用字典来计算每一个
p1
的发生次数。这还可以防止生成现有
p1
s的错误:

Dim p1Counter = New Dictionary(Of String, Int32)

For Each obj In lstmp
    Dim p1Count As Int32
    Dim containsP1 = p1Counter.TryGetValue(obj.p1, p1Count)
    If containsP1 Then
        p1Count += 1
        Dim newP1 = obj.p1 & p1Count
        While p1Counter.ContainsKey(newP1)
            p1Count += 1
            newP1 = obj.p1 & p1Count
        End While
        obj.p1 = newP1
    Else
        p1Count = 1
    End If
    p1Counter(obj.p1) = p1Count
Next

您必须递增它,而不是始终连接1。我会用字典来计算每一个
p1
的发生次数。这还可以防止生成现有
p1
s的错误:

Dim p1Counter = New Dictionary(Of String, Int32)

For Each obj In lstmp
    Dim p1Count As Int32
    Dim containsP1 = p1Counter.TryGetValue(obj.p1, p1Count)
    If containsP1 Then
        p1Count += 1
        Dim newP1 = obj.p1 & p1Count
        While p1Counter.ContainsKey(newP1)
            p1Count += 1
            newP1 = obj.p1 & p1Count
        End While
        obj.p1 = newP1
    Else
        p1Count = 1
    End If
    p1Counter(obj.p1) = p1Count
Next