If (workerClass1.CompareMiddleSegment("blue") = 0) Then
'Заменить средний сегмент
workerClass1.MiddleSegment = "orange"
'Заменить слово
testArray(idx) = workerClass1.getWholeString
End If
Next 'внутренний цикл
Next 'внешний цикл
'Остановить секундомер!
PerformanceSampling.StopSample(2)
MsgBox(PerformanceSampling.GetSampleDurationText(2))
End Sub
Option Strict On
Imports System
Public Class LessAllocationsWorkerClass
Public WriteOnly Property MiddleSegment As String
Set(ByVal Value As String)
m_middleSegmentNew = Value
End Set
End Property
Private m_middleSegmentNew As String
Private m_index_1st_undscore As Integer
Private m_index_2nd_undscore As Integer
Private m_stringIn As String
Public Sub ReuseClass(ByVal in_word As String)
'----------------------------------------------
'Для повторного использования класса необходимо
'полностью очистить внутреннее состояние
'----------------------------------------------
m_index_1st_undscore = -1
m_index_2nd_undscore = -1
m_middleSegmentNew = Nothing
m_stringIn = in_word 'Это не приводит к созданию копии строки
'Осуществляем поиск символов подчеркивания ("_") в строке
m_index_1st_undscore = in_word.IndexOf("_", 0)
'В случае отсутствия символов "_" все, что нам нужно, это первый сегмент
If (m_index_1st_undscore = -1) Then
Return
End If
'Найти второй символ "_"
m_index_2nd_undscore = in_word.IndexOf("_", _
m_index_1st_undscore + 1)
End Sub
Public Function CompareMiddleSegment(ByVal compareTo As String) As Integer
'В случае отсутствия второго символа "_" отсутствует и средний сегмент
If (m_index_2nd_undscore < 0) Then
'Если мы сравниваем с пустой строкой, то это означает
'совпадение
If ((compareTo = Nothing) OrElse (compareTo = "")) Then
Return 0
End If
Return -1
End If
'Сравнить средний сегмент с первым и вторым сегментами
Return System.String.Compare(m_stringIn, m_index_1st_undscore + 1, _
compareTo, 0, _
m_index_2nd_undscore - m_index_1st_undscore - 1)
End Function
Public Function getWholeString As String
'Если полученный средний сегмент не является новым,
'возвратить исходный сегмент
If (m_middleSegmentNew = Nothing) Then
Return m_stringIn
End If
'Создать возвращаемую строку
Return m_stringIn.Substring(0, m index_1st_undscore + 1) + _
m_middleSegmentNew + m_stringIn.Substring( _
m_index_2nd_undscore, _
m_stringIn.Length - m_index_2nd_undscore)
End Function
End Class
Const COUNT_UNTIL As Integer = 300
Const LOOP_ITERATIONS As Integer = 40
'---------------------------------------------------------