ОК, там куча кода, я не собираюсь переводить все это, кроме, например, ( при условии VS2010 или более поздней версии ). , .
new RegexDateTimePattern (
@"next +([2-9]\d*) +months",
delegate (Match m) {
var val = int.Parse(m.Groups[1].Value);
return DateTime.Now.AddMonths(val);
}
)
будет
Dim p2 = New RegexDateTimePattern(
"next +([2-9]\d*) +months",
Function(m)
Dim val = Int.Parse(m.Groups(1).Value)
Return DateTime.Now.AddMonths(val)
End Function
)
и
new RegexDateTimePattern (
String.Format(@"(last|next) *({0}).*", String.Join("|", dayList.ToArray())),
delegate (Match m) {
var val = m.Groups[2].Value;
var direction = (m.Groups[1].Value == "last")? -1 :1;
var dayOfWeek = dayList.IndexOf(val.Substring(0,3));
if (dayOfWeek >= 0) {
var diff = direction*(dayOfWeek - (int)DateTime.Today.DayOfWeek);
if (diff <= 0 ) {
diff = 7 + diff;
}
return DateTime.Today.AddDays(direction * diff);
}
return DateTime.MinValue;
}
),
становится
Dim p = New RegexDateTimePattern(
String.Format("(last|next) *({0}).*", String.Join("|", dayList.ToArray())),
Function(m)
Dim val = m.Groups(2).Value
Dim direction = If(m.Groups(1).Value = "last", -1, 1)
Dim dayOfWeek = dayList.IndexOf(val.Substring(0, 3))
If (dayOfWeek >= 0) Then
Dim diff = direction * (dayOfWeek - CType(DateTime.Today.DayOfWeek, Integer))
If (diff <= 0) Then
diff = 7 + diff
End If
Return DateTime.Today.AddDays(direction * diff)
End If
Return DateTime.MinValue
End Function
)
Есть ли что-нибудь еще, что крутит ваш меллон?
Если это не VS2010 (или даже если это так, и вам не нравятся лямбда-выражения), тогда все, что вам нужно сделать, это взять каждое из лямбда-выражений (функции "in line" в коде VB), создать явные именованные функции для каждой из них (например, RegexDateTimePattern_Helper2 для последней) и передать AddressOf RegexDateTimePattern_Helper2
вместо лямбда-выражения
1020 * т.е. *
Function RegexDateTimePattern_Helper2(Match m) as DateTime ''# Dreadful name
dim val = m.Groups[2].Value
dim direction = if(m.Groups(1).Value = "last", -1 ,1)
Dim dayOfWeek = dayList.IndexOf(Val.Substring(0, 3))
If (dayOfWeek >= 0) Then
Dim diff = direction * (dayOfWeek - CType(DateTime.Today.DayOfWeek, Integer))
If (diff <= 0) Then
diff = 7 + diff
End If
Return DateTime.Today.AddDays(direction * diff)
End If
Return DateTime.MinValue
End Function
.
,
.
New RegexDateTimePattern (
String.Format("(last|next) *({0}).*", String.Join("|", dayList.ToArray())),
AddressOf RegexDateTimePattern_Helper2)