需要VB.NET列表逻辑的帮助吗

需要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(

嘿,伙计们,所以我正在创建一个列表(字符串),大小总是9

此列表包含真/假值。我需要遍历这个列表,找到3个为真的值(永远不会超过3个,但可以小于3个),然后在代码中将3个字符串值设置为这些值的3个索引+1

这是我目前的代码:

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中@你是什么意思?