2011-11-13 8 views
0

は、私は、次の試してみましたが、私はdatetimeのsystem.nullableをサブルーチンのオプションパラメータとして設定するにはどうすればよいですか?

定数式が

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

「サブルーチン」..クール! :) – joshcomley

+0

これはギリシャ語の同等のものです。 "Subprocedure"でもあるかもしれません:) – OrElse

答えて

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! 
} 

さて、IFFあなたはnullは、合法的に呼び出し側によって渡されることはありませんで、あなたができることを知っている:

public void ExampleSub(string Test, System.Nullable<DateTime> fromDate = null) 
{ 
    fromDate = fromDate?? System.DateTime.Now; 
    //An Even Greater sub! 
} 
+0

あなたのソリューション(Vb.NETで)を試しましたが、今ではエラーBC31405が発生します:オプションのパラメータは構造型を持つことができません。どんなアイデアですか? – OrElse

+0

@ Chocol8:mmmわからない。私のサンプルはC#であり、確かにC#でコンパイルされます:http://ideone.com/NJ4yk – sehe

2

あなたは非を使用することはできませんデフォルトパラメータの定数式。 System.DateTime.Todayはプログラムをいつ実行するかによって決まりますので、定数ではありません。

デフォルトの定数式を使用してチェックし、ルーチン内でfromDateSystem.DateTime.Nowと設定します。通常nullは@sehes answerのように特殊な値として使用されます。 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! 
} 
0

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 
+0

私はそれを試しました、エラーは次のとおりです:オプションのパラメータは構造体の型を持つことはできません。 –

+0

@openandfree - あなたは何のリリースをしていますか? – dbasnett

+0

私は3.5を使用しています 私はそれを解決しましたが、Optional ByVal TimeSlotDate As DateTime = Nothing –

0

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 
関連する問題