Итерации сравнения - как я могу написать это лучше?


Я хотел бы написать следующий кусок кода, более чистых и более эффективных, любые замечания будут с благодарностью:

Dim dt As DataTable = SomeDataTable
    For Each dr As DataRow In dt.Rows
        Dim myColumn As String = dr("column").Trim().ToUpper()
        For Each group As String In collection
            If (group.Trim().ToUpper() = myColumn) Then
               'Add some logic here
            End If
        Next`


358
2
задан 5 мая 2011 в 11:05 Источник Поделиться
Комментарии
2 ответа

Я не разработчик VB.NET но если я пишу это в C# я хотел бы использовать метод contains, на ваш коллекция. Я предполагаю, что ваша коллекция представляет собой список строк, в этом случае.

Я включил то, что код может выглядеть в VB.Net ниже. Я даю никаких гарантий, что это хоть и работает. :)

Dim dt As DataTable = SomeDataTable

For Each dr As DataRow In dt.Rows
Dim myColumn As String = dr("column").ToString().Trim()

If collection.Contains(myColumn, StringComparer.OrdinalIgnoreCase) Then
'Do your stuff here
End If
Next

4
ответ дан 5 мая 2011 в 01:05 Источник Поделиться

Есть две проблемы с кодом представлены. Если вы можете гарантировать, что вы никогда не нужна локализация и того, что строки в коллекции всегда быть в верхнем регистре, то вы могли бы использовать что-то вроде этого:

Dim dt As DataTable = SomeDataTable

For Each dr As DataRow In dt.Rows
'I always recommend explicitly calling .ToString() first
'In response to @Mr. Disappointment's comment - he is right
'Null check this first
If Not dr.IsNull("column") Then
Dim myColumn As String = dr("column").ToString().ToUpper().Trim()

If collection.Contains(myColumn) Then
'Do your stuff here
End If
End If
Next

Однако, если эти вещи не гарантируют, то лучше вышесказанного .Содержит и используя свой собственный цикл (который является то, что .Содержится в конечном итоге в любом случае):

Dim dt As DataTable = SomeDataTable

Есть две проблемы с кодом представлены. Если вы можете гарантировать, что вы никогда не нужна локализация и того, что строки в коллекции всегда быть в верхнем регистре, то вы могли бы использовать что-то вроде этого:

Dim dt As DataTable = SomeDataTable

For Each dr As DataRow In dt.Rows
'I always recommend explicitly calling .ToString() first
'In response to @Mr. Disappointment's comment - he is right
'Null check this first
If Not dr.IsNull("column") Then
Dim myColumn As String = dr("column").ToString().Trim()

For each group as String in collection
If group.Equals(myColumn, StringComparison.OrdinalIgnoreCase) Then
'Do your stuff here
End If
Next
End If
Next

1
ответ дан 5 мая 2011 в 12:05 Источник Поделиться