Проблемы обработки массива дат в VB.NET - PullRequest
1 голос
/ 20 октября 2011

У меня возникло несколько проблем при попытке настроить подпрограмму в Visual Basic .NET для просмотра массива записей и удаления всех записей, где поле даты находится перед текущей датой.Вот мой текущий код:

Sub FutureDate()
        Dim movefrom As Integer
        For x As Integer = 0 To UBound(notifications)

            If notifications(x).MeetingTime < Now.Date Then  'Finds first current/future date.
                movefrom = x
            End If
        Next
        Dim moveto As Integer = 0
        For x As Integer = movefrom To UBound(notifications) 'Moves dates after this to beginning of array.
            movefrom += 1
            notifications(moveto) = notifications(movefrom)
            moveto += 1
        Next
        ReDim Preserve notifications(moveto)  'Shortens the array to the correct length.
    End Sub

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

Записи уже отсортированы по дате, поэтому, на мой взгляд, это должно делать то, что я хочу, то есть удалить записи с датами в прошлом, переместить все остальное в начало массива, а затем удалить пробелы в конце, из которого записи были перемещены.Тем не менее, я часто совершаю глупые ошибки с такими вещами, поэтому внешний вклад очень ценится.Любая помощь, которую вы можете оказать, была бы великолепна.

Спасибо.

Ответы [ 2 ]

1 голос
/ 20 октября 2011

Это однострочник:

Sub FutureDate()
    notifications = notifications.Where(Function(n) n.MeetingTime < Today).ToArray()
End Sub

Но лучше разработать такую ​​функцию, которая возвращает новый массив:

Function FutureDate(ByVal items() As MyType) As MyType()
    Return items.Where(Function(n) n.MeetingTime < Today).ToArray()
End Function

Иеще лучше думать с точки зрения последовательностей , а не массивов:

Function FutureDate(ByVal items As IEnumerable(Of MyType)) As IEnumerable(Of MyType)
    Return items.Where(Function(n) n.MeetingTime < Today)
End Function
0 голосов
/ 20 октября 2011
DateTime[] futureDates = notifications.Where(n => n.MeetingTime > DateTime.Now).Select(n => n.MeetingTime).ToArray();

Это должно сработать, я думаю. Если нет, то это очень похоже. Это должно вернуть только даты из собраний, которые позже, чем сейчас.

Надеюсь, это поможет.

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