Мне нужно выбрать способ написать фрагмент кода, который будет повторяться очень сильно, поэтому я хочу, чтобы он был как можно быстрее.Вложенные If - ElseIf - Выберите случай
Это мой код (на данный момент):
For Cel As Short = 0 To Cels - 1
Rw = Int(Cel/3) + 1
Col = Cel - ((Rw - 1) * 3) + 1
RifTxt = TabW(RifTW("Pi")).Cells(Cel)
If Col = 1 Then
RowArr(Col) = RifTxt
Else
If DateTime.TryParse(RifTxt, culture, Styles, DateResult) Then
RowArr(Col) = DateResult.ToString("yyyy-MM-dd")
Else
RowArr(Col) = "0000-00-00"
End If
If Col = 3 Then
RowArr(3) = Rw
Pi_W.Rows.Add (RowArr)
End If
End If
Next Cel
Я интересно, изменяя его (с помощью ELSEIF Или Select Case), как показано ниже:
Использование ElseIf
For Cel As Short = 0 To Cels - 1
Rw = Int(Cel/3) + 1
Col = Cel - ((Rw - 1) * 3) + 1
RifTxt = TabW(RifTW("Pi")).Cells(Cel)
If Col = 1 Then
RowArr(Col) = RifTxt
ElseIf Col = 2
If DateTime.TryParse(RifTxt, culture, Styles, DateResult) Then
RowArr(Col) = DateResult.ToString("yyyy-MM-dd")
Else
RowArr(Col) = "0000-00-00"
End If
ElseIf Col = 3 Then
If DateTime.TryParse(RifTxt, culture, Styles, DateResult) Then
RowArr(Col) = DateResult.ToString("yyyy-MM-dd")
Else
RowArr(Col) = "0000-00-00"
End If
RowArr(3) = Rw
Pi_W.Rows.Add (RowArr)
End If
Next Cel
Или с помощью Select Case:
For Cel As Short = 0 To Cels - 1
Rw = Int(Cel/3) + 1
Col = Cel - ((Rw - 1) * 3) + 1
RifTxt = TabW(RifTW("Pi")).Cells(Cel)
Select Case Col
Case is = 1 Then
RowArr(Col) = RifTxt
Case is = 2
If DateTime.TryParse(RifTxt, culture, Styles, DateResult) Then
RowArr(Col) = DateResult.ToString("yyyy-MM-dd")
Else
RowArr(Col) = "0000-00-00"
End If
Case is = 3 Then
If DateTime.TryParse(RifTxt, culture, Styles, DateResult) Then
RowArr(Col) = DateResult.ToString("yyyy-MM-dd")
Else
RowArr(Col) = "0000-00-00"
End If
RowArr(3) = Rw
Pi_W.Rows.Add (RowArr)
End Select
Next Cel
Я попытался сравнить три метода на .netFiddle, но я не уверен в результатах.
Не могли бы вы предложить мне правильный выбор?
Я бы использовал функцию, которая возвращала значение, основанное на переменной 'Col', которую вы передаете ей. Это сделало бы это более удобочитаемым. – OneFineDay
у вас есть код, у NET есть секундомер hi-res, просто выполняйте каждый цикл и время их (сделайте это в режиме Release). Возможно, вы захотите изменить итератор цикла на Int32/Integer. – Plutonix
@Plutonix Вы говорите мне, что использование 'для Cel As Integer' сделает код быстрее, чем использование' For Cel As Short'? – genespos