需要VB.NET列表逻辑的帮助吗
嘿,伙计们,所以我正在创建一个列表(字符串),大小总是9 此列表包含真/假值。我需要遍历这个列表,找到3个为真的值(永远不会超过3个,但可以小于3个),然后在代码中将3个字符串值设置为这些值的3个索引+1 这是我目前的代码:需要VB.NET列表逻辑的帮助吗,vb.net,list,loops,Vb.net,List,Loops,嘿,伙计们,所以我正在创建一个列表(字符串),大小总是9 此列表包含真/假值。我需要遍历这个列表,找到3个为真的值(永远不会超过3个,但可以小于3个),然后在代码中将3个字符串值设置为这些值的3个索引+1 这是我目前的代码: Private Sub SetDenialReasons(ByVal LoanData As DataRow) Dim reasons As New List(Of String) With reasons .Add(
Private Sub SetDenialReasons(ByVal LoanData As DataRow)
Dim reasons As New List(Of String)
With reasons
.Add(LoanData.Item("IsDenialReasonDTI").ToString)
.Add(LoanData.Item("IsDenialReasonEmploymentHistory").ToString)
.Add(LoanData.Item("IsDenialReasonCreditHistory").ToString)
.Add(LoanData.Item("IsDenialReasonCollateral").ToString)
.Add(LoanData.Item("IsDenialReasonCash").ToString)
.Add(LoanData.Item("IsDenialReasonInverifiableInfo").ToString)
.Add(LoanData.Item("IsDenialReasonIncomplete").ToString)
.Add(LoanData.Item("IsDenialReasonMortgageInsuranceDenied").ToString)
.Add(LoanData.Item("IsDenialReasonOther").ToString)
End With
Dim count As Integer = 0
For Each item As String In reasons
If item = "True" Then
count += 1
End If
Next
If count = 1 Then
DenialReason1 = (reasons.IndexOf("True") + 1).ToString
ElseIf count = 2 Then
DenialReason1 = (reasons.IndexOf("True") + 1).ToString
DenialReason2 = (reasons.LastIndexOf("True") + 1).ToString
ElseIf count >= 3 Then
Dim tempIndex As Integer = reasons.IndexOf("True")
DenialReason1 = (reasons.IndexOf("True") + 1).ToString
DenialReason2 = (reasons.IndexOf("True", tempIndex, reasons.Count - 1) + 1).ToString
DenialReason3 = (reasons.LastIndexOf("True") + 1).ToString
End If
End Sub
我在数组中有3个相邻的True,代码失败了,异常是count必须是正数或其他什么
现在,如果小于3个True,则应将尚未设置为空的其余DenialReason设置为空(但在构造函数中已将其设置为空以说明这一点)
有什么想法吗?也许您可以修改每个
代码的,以处理拒绝理由的分配。这仍然感觉像一个黑客,但我认为它可能会更干净,你所拥有的。如果使用此代码,则不需要以计数=1…开头的代码。
:
Dim count As Integer = 0
Dim index As Integer = 1
For Each item As String In reasons
If item = "True" Then
count += 1
Select Case count
Case 1
DenialReason1 = index.ToString()
Case 2
DenialReason2 = index.ToString()
Case 3
DenialReason3 = index.ToString()
End Select
End If
index += 1
Next
上面的索引
变量采用基于1的索引。我认为这比使用IndexOf()
更干净
我认为一个更好的解决方案可能是有一个DenialReason
s列表,并添加到该列表中,因为项目是正确的:
Dim count As Integer = 0
Dim index As Integer = 1
Dim denialReasons As New List(Of String)()
For Each item As String In reasons
If item = "True" Then
denialReasons.Add(index)
End If
index += 1
Next
然后,您可以简单地遍历您的denialReasons
列表。这是灵活的,因此无论出于何种原因,如果您有三个以上的DenialReason
s,则无需添加另一个硬编码变量。您使用的是哪一版本的.NET?如果是3.5或更高版本,您可以使用LINQ解决这个问题。它是3.5,但我不能使用LINQ。看起来您可能会保留DenialReason 2或3的旧值。您可以使用扩展方法吗?不知道扩展方法是什么。我的错,我们实际上在.NET2.0中@你是什么意思?