vb.net - 如何创建一个布尔函数来列出通用集合中的对象?
问题描述
创建一个之后List(Of T)
,我想创建一个Boolean
函数。首先,我们将要求数据在列表中添加一个对象。但是,如果这个新对象具有相同的“DNI”(来自 Aspirante 类的字符串属性),那么我们不能将这个新对象包含在列表中。因此,应该是True
当我们有一个具有相同属性的对象时,False
当我们没有时,我们可以添加新对象。
下面是我做的代码:
Public Class Oposicion
Private datos As New List(Of Aspirante)()
Public Function Alta(ByRef objAspirante As Aspirante) As Boolean
If datos.Contains(objAspirante.DNI) Then
Return True
Else
datos.Add(objAspirante)
Return False
End If
End Function
End Class
然而它不起作用。我不知道该怎么做。对不起,如果我不够清楚。
解决方案
这不会直接回答您的问题,但它涉及大量代码,因此无法在评论中使用。
您可能一开始就不应该使用 a List(Of T)
。HashSet(Of T)
已经包含防止添加重复项目的功能,因此这可能是一个更好的选择。如果要比较特定属性值上的对象,则需要首先基于该值创建一个比较器:
Public Class Thing
Public Property Stuff As String
End Class
Public Class ThingComparer
Implements IEqualityComparer(Of Thing)
Public Overloads Function Equals(x As Thing, y As Thing) As Boolean Implements IEqualityComparer(Of Thing).Equals
Return x.Stuff.Equals(y.Stuff)
End Function
Public Overloads Function GetHashCode(obj As Thing) As Integer Implements IEqualityComparer(Of Thing).GetHashCode
Return obj.GetHashCode()
End Function
End Class
然后,您创建一个HashSet(Of T)
使用该比较器来确定相等性的:
Dim things As New HashSet(Of Thing)(New ThingComparer)
然后,您可以通过调用添加您喜欢的项目Add
。这将添加新项目并返回True
,或者不会添加重复项目并返回False
:
Dim variousStuff = {"One", "Two", "One"}
For Each stuff In variousStuff
Dim something As New Thing With {.Stuff = stuff}
If things.Add(something) Then
Console.WriteLine($"'{stuff}' was added successfully.")
Else
Console.WriteLine($"'{stuff}' is a duplicate and was not added.")
End If
Next
潜在的缺点是它HasSet(Of T)
没有实现IList(Of T)
,所以你不能通过索引访问项目。它确实实现ICollection(OF T)
了,所以它确实有一个Count
属性,你可以用For Each
循环枚举它。
推荐阅读
- linux - 带单变量的 SED'ing 参数
- python - LSTM+FFN 性能比 FFN 差
- python - Python将字符串类型列表的数据框转换为列表
- java - 使用 Apache POI 将 äöü 写入 Word
- sql - 将 hanadb 特定函数 HIERARCHY 与 R 的 dbplyr 一起使用
- c - 在C中的struct指针中填充数组
- socket.io - 生产中的 Socket.io 返回 400 Bad Request 错误
- django - Django在查询后渲染多对多属性,显示无
- android - Moblie [Android] 上的完整 C++ LibTorch API
- facebook - 从 Graph API 获取 Facebook 广告帐户预付余额