Как мне заполнить массив только непустыми датами

#arrays #vb.net

#массивы #vb.net

Вопрос:

Я пытаюсь захватить самую раннюю дату в серии значений и отобразить ее в поле в моем приложении. Это работает просто отлично, если каждое поле (начиная с @CUST ) имеет допустимое значение даты, но выдает ошибки, когда какое-либо из них является пустым / недействительным.

 Dim dates() as Date = {[@CUST42FV], [@CUST43FV], [@CUST44FV], [@CUST45FV], [@CUST46FV], [@CUST47FV], 
[@CUST48FV], [@CUST49FV], [@CUST50FV]}
System.Array.Sort(dates)
Dim first As Date = dates(0)
[CX.UW.LASTDATE] = first
 

Комментарии:

1. Можете ли вы уточнить, что вы подразумеваете под пустыми / недействительными датами? Насколько я знал, тип даты не может быть ничем, кроме действительной даты

2. К какому типу относятся эти переменные с неправильными именами? Если они имеют тип Date, то они не могут быть «пустыми» для начала. Если они не являются типом Date, то почему вы подписываете их на элементы массива Date? У вас должен быть включен параметр Strict, и это помешало бы вам даже попробовать это. Опция Строгое отключение клавиш вы играете быстро и свободно с типами данных, и, таким образом, проблема является общим результатом.

3. Поля уже являются датами, но когда они пусты, по умолчанию они равны 01/01/0001, я полагаю. Мне нужно иметь возможность исключать их из массива. Поскольку это происходит в рамках существующего стороннего приложения, у меня нет особого контроля над именованием.

Ответ №1:

Вы можете использовать выражение LINQ только для выбора дат, которые проходят TryParse:

 Dim dates() As String = {value1, value2, value3}
Dim orderedValidDates() As DateTime = (From d In dates Where DateTime.TryParse(d.ToString(), Nothing) Order By Date.Parse(d) Select Date.Parse(d)).ToArray()

Dim firstDate As DateTime = orderedValidDates.FirstOrDefault()
Console.WriteLine(firstDate)
 

Скрипка: живая демонстрация