Vb.net 如何使创建的每个实例的类成员都是唯一的?

Vb.net 如何使创建的每个实例的类成员都是唯一的?,vb.net,class,oop,object,Vb.net,Class,Oop,Object,我的类成员“用户名”对于创建的所有“卖家”都必须是唯一的?我可以在课堂上实现这个吗,还是在主要课堂上实现?此外,两个类成员都不能为空或包含空格。我是否应该将所有对象存储在列表中,然后验证所述用户名是否已经存在?我不知道该把它放在哪里 Public Class Seller Private _username As String Private _password As String Public Sub New(aname As String, apassword As String)

我的类成员“用户名”对于创建的所有“卖家”都必须是唯一的?我可以在课堂上实现这个吗,还是在主要课堂上实现?此外,两个类成员都不能为空或包含空格。我是否应该将所有对象存储在列表中,然后验证所述用户名是否已经存在?我不知道该把它放在哪里

Public Class Seller

Private _username As String
Private _password As String

Public Sub New(aname As String, apassword As String)
    Me.Password = apassword
    Me.UserName = anom
End Sub

Public Property Username As String
    Get
        Return _username
    End Get
    Set(value As String)
        Dim test As String = value
        test.Replace(" ", "")
        test.Trim()
        If (test <> value Or value = " ") Then
            Throw (New ArgumentException("Username cannot be empty or contain spaces")  
        Else
            _username = value
        End If
    End Set
End Property

Public Property Password As String
    Get
        Return _password
    End Get
    Set(value As String)
        Dim test As String = value
        test.Replace(" ", "")
        test.Trim()
        If (test <> value Or value = " ") Then
            Throw (New ArgumentException("Password cannot be empty or contain spaces")  
        Else
            _password = value
        End If

    End Set
End Property
End Class
公共类卖家
Private\u用户名作为字符串
私有密码作为字符串
Public Sub New(aname作为字符串,apassword作为字符串)
Me.Password=apassword
Me.UserName=anom
端接头
公共属性用户名作为字符串
得到
返回\u用户名
结束
设置(值为字符串)
作为字符串的Dim测试=值
测试。替换(“,”)
test.Trim()
如果(测试值或值=”),则
抛出(新ArgumentException(“用户名不能为空或包含空格”)
其他的
_用户名=值
如果结束
端集
端属性
作为字符串的公共属性密码
得到
返回密码
结束
设置(值为字符串)
作为字符串的Dim测试=值
测试。替换(“,”)
test.Trim()
如果(测试值或值=”),则
抛出(新ArgumentException(“密码不能为空或包含空格”)
其他的
_密码=值
如果结束
端集
端属性
末级
谢谢

HashSet
是您要查找的集合类型

根据MSDN:

HashSet类提供高性能的集合操作。集合是不包含重复元素的集合,其元素没有特定顺序

注意:
HashSet.Add()
方法返回一个
Boolean
True
如果该项被添加到集合中,如果该项已经存在,则返回
False

因此,您的代码应该是:

Dim theSellers As New HashSet(Of Seller)
Dim success As Boolean = theSellers.Add(New Seller())

' Was the addition of the Seller successful or not?     
If Not success Then
    ' No, so do something here for duplicates if you wish
End If

考虑一下面向对象设计所说的责任和“需要知道”原则

  • 每个
    卖家
    对象是否都有责任确保其自身的独特性
  • 每个
    卖家
    对象检查所有其他
    卖家
    对象是否可以接受/合适?即使知道它们存在?或者该对象只知道自己的销售数据是否更有用

一种方法是将它们存储在一个
列表(卖方)
中,然后在创建一个新名称之前扫描它。谢谢,非常有用。很遗憾,我不能使用哈希集,因为任务是在不使用任何数组属性的情况下手动创建列表(我应该在问题中提到它),但这是有道理的,我还没有学会。@user2960568-好吧,我希望这会对你以后有所帮助,如果你觉得答案有用,那么在你能投票的时候就可以投票了。:-)很不幸,我不能投票,因为我缺乏“声誉”,但当我有足够的时间时,我会回来的。