我想将枚举数组与单个枚举实例进行比较。
我有一个类与枚举类型数组list
Public Enum InvalidEmailType
Multiple_Updates
Period_Before_At_Sign
Missing_Dot_Com
End Enum
Public Class CustomerClass
Public CustomerName As String
Public ErrorTypeList = [Enum].GetValues(GetType(InvalidEmailType))
Public ErrorDescription As String
End Class
根据添加到列表中的值,我想运行特定的代码。
为了做到这一点,我将整个列表与单个实例进行比较: If UpdateCustomer.MatchErrorType(customer.ErrorTypeList, InvalidEmailType.Trailing_Period) = True Then
'Run Code
End If
在函数内部,我将整个列表与单个实例进行比较。
换句话说,我循环遍历类中的整个列表并检查值是否存在:
Public Shared Function MatchErrorType(CustomerErrortypeList As List(Of InvalidEmailType), EmailError As InvalidEmailType) As Boolean
MatchErrorType = False
Dim Found As InvalidEmailType = CustomerErrortypeList.Where(Function(match) match.ToString = EmailError.ToString).OrderByDescending(Function(match) match.ToString).FirstOrDefault()
If Found > 0 Then
MatchErrorType = True
End If
End Function
问题在这里:我如何在函数参数中声明数组列表?
List(Of InvalidEmailType)不工作,因为我得到一个强制转换错误
无法强制转换'EmailValidationReport '类型的对象。InvalidEmailType[]' to type 'System.Collections.Generic.List ' 1[EmailValidationReport.InvalidEmailType]'
将ErrorTypeList设置为List(of InvalidEmailType)
而不是数组。
Public ErrorTypeList = [Enum].GetValues(GetType(InvalidEmailType)) _
.Cast(of InvalidEmailType)().ToList()
或
Dim list = customer.ErrorTypeList.Cast(of InvalidEmailType)().ToList()
If UpdateCustomer.MatchErrorType(list, InvalidEmailType.Trailing_Period) Then
'Run Code
End If
由于您没有做任何特定于List
或Array
的事情,因此您可以使您的方法签名采用IEnumerable
而不是List
。这应该能够处理List
和Array
(以及其他一些类型)。
Public Shared Function MatchErrorType(CustomerErrortypeList As IEnumerable(Of InvalidEmailType), EmailError As InvalidEmailType) As Boolean
Dim Found As InvalidEmailType = CustomerErrortypeList.Where(Function(match) match.ToString = EmailError.ToString).OrderByDescending(Function(match) match.ToString).FirstOrDefault()
MatchErrorType = (Found > 0)
End Function