#c# #.net #vb.net
#c# #.net #vb.net
Вопрос:
Я попробовал следующее, но получаю ошибку
требуется постоянное выражение
Public Sub ExampleSub(ByVal Test as string,
Optional ByVal fromDate As System.Nullable(Of DateTime) = Date.Today)
'A Great sub!
End sub
и вот C#
public void ExampleSub(string Test,
System.Nullable<DateTime> fromDate = System.DateTime.Today)
{
//A Great sub!
}
Заранее спасибо
Комментарии:
1. Это греческий эквивалент.. Также может быть «подпроцедура»
![]()
Ответ №1:
Вы не можете использовать непостоянное выражение для параметра по умолчанию. System.DateTime.Today
будет зависеть от того, когда вы запускаете программу, поэтому оно не является постоянным.
Используйте постоянное выражение по умолчанию, а затем проверьте это и установите fromDate
на System.DateTime.Now
в подпрограмме. Обычно null
используется в качестве специального значения, как в ответе @sehes. Если null
в вашем коде есть другое специальное значение, вы могли бы использовать значение, которое никогда не будет использоваться в качестве параметра defaul, например System.DateTime.MinValue
:
public void ExampleSub(string Test,
System.Nullable<DateTime> fromDate = DateTime.MinValue)
{
fromDate = fromDate == DateTime.MinValue ? System.DateTime.Now : fromDate;
//A Great sub!
}
Ответ №2:
Вы не можете, компилятор скажет вам, почему
в C#:
public void ExampleSub(string Test)
{
//A Great overload!
ExampleSub(Test, System.DateTime.Now);
}
public void ExampleSub(string Test, System.Nullable<DateTime> fromDate)
{
//A Great sub!
}
Теперь, если вы знаете, что null
это не будет законно передано вызывающим, вы могли бы сделать:
public void ExampleSub(string Test, System.Nullable<DateTime> fromDate = null)
{
fromDate = fromDate?? System.DateTime.Now;
//An Even Greater sub!
}
Комментарии:
1. Я попробовал ваше решение (в Vb.NET ) и теперь я получаю ошибку BC31405: необязательные параметры не могут иметь типы структуры. Пожалуйста, есть идеи?
2. @Chocol8: ммм, не уверен. Моим примером был C #, и он обязательно компилируется на C #: ideone.com/NJ4yk
Ответ №3:
VB
Public Sub ExampleSub(Test As String, _
Optional fromDate As System.Nullable(Of DateTime) = Nothing)
'A Great sub!
If fromDate Is Nothing Then
'code here for no fromDate
'i.e. Now
fromDate = DateTime.Now
End If
End Sub
Комментарии:
1. Я попробовал это, ошибка: необязательные параметры не могут иметь типы структуры.
2. @openandfree — Какую версию вы используете?
3. Я использую 3.5, хотя я решил это как: Необязательно использовать TimeSlotDate как DateTime = Ничего
Ответ №4:
Если кто-то делает это в VB.Net это способ, которым я решил свою проблему, я не нашел точную вещь в этом потоке, если это кому-то поможет:
/*I set below line as parameter in method*/
Optional ByVal SlotDate As DateTime = Nothing
If Not SlotDate = Nothing Then
/* code to execute when date passed */
Else
/* code to execute when there is no date passed */
End If