Нужна помощь с VB.NET List Logic - PullRequest
       12

Нужна помощь с VB.NET List Logic

0 голосов
/ 04 августа 2010

Привет, ребята, поэтому я создаю список (из строки), всегда размером 9.

Этот список содержит значения True / False. Мне нужно просмотреть этот список и найти 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 рядом друг с другом в массиве, и код завершился ошибкой с исключением, говорящим, что число должно быть положительным или что-то в этом роде.

Теперь, если True меньше 3, он должен установить оставшиеся DenialReason, которые еще не были заданы, как пустые (однако они уже установлены как пустые в конструкторе, чтобы учесть это).

Есть идеи?

1 Ответ

1 голос
/ 04 августа 2010

Возможно, вы могли бы изменить свой код For Each для обработки присвоения DenialReason s.Это все еще похоже на взлом, но я думаю, что это может быть чище, что у вас есть.Если вы используете этот код, вам не нужен код, начинающийся с If count = 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

Переменная index, указанная выше, предполагает индекс на основе 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 с, вам не нужно добавлять еще одну жестко запрограммированную переменную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...