1

VB6で次のC#コードを再作成しようとしています。

private void ChangeTab(string tabName, bool clearAll = true)
{
    Yadyyada(tabName);

    if (clearAll)
    {
        DoMoreStuff();
    }
}

これが私がこれまでに持っているものです:

Private Sub ChangeTab(ByVal tabName As String, Optional ByVal clearAll As Boolean)

    Yadyyada(tabName)

    If clearAll = True Then
        DoMoreStuff
    End If

End Sub

これまでのところ、デフォルトのパラメータは別として良いです。clearAllC#と同じ方法でメソッドシグネチャにデフォルト値trueを割り当てることはできますか、それともメソッドの開始時にこれを行う必要がありますか?

ありがとう

4

4 に答える 4

9

うわー、これは私を取り戻します..なぜあなたが技術的に逆変換しているのか尋ねることができますか?

とにかく、Optionalキーワードを使用できます。

Private Sub ChangeTab(ByVal tabName As String, Optional ByVal clearAll As Boolean = True)

問題はByValを使用しています。メモリから、明示的に指定されていない限り、VB6のすべてがByValでした。

編集:私は間違っています。デフォルトはByRefでした。とても長いです!

于 2012-08-08T12:13:49.490 に答える
4

はい、C#と同じことができます

Private Sub ChangeTab(ByVal tabName As String, Optional ByVal clearAll As Boolean = True) 
    Debug.Print "Value for clearAll=" & clearAll
End Sub

で呼び出す

ChangeTab("AName")

Trueを出力します

于 2012-08-08T12:15:06.053 に答える
2

試す:

Private Sub ChangeTab(ByVal tabName As String, Optional clearAll As Boolean = True)

    Call Yadyyada(tabName)

    If clearAll Then
        DoMoreStuff
    End If

End Sub

http://msdn.microsoft.com/en-us/library/aa266305%28v=vs.60%29.aspxを参照してください

于 2012-08-08T12:14:41.747 に答える
0

このようにIsMissing関数を使用できます

Private Sub ChangeTab(ByVal tabName As String, Optional ByVal clearAll As Boolean)

    Yadyyada(tabName)

    If IsMissing(clearAll) = True Or clearAll = True Then
        DoMoreStuff
    End If

End Sub

私の間違い!オプションのパラメータにデフォルトのtrue値を設定し、コードでこれを確認するのが最善の解決策です。

Private Sub ChangeTab(ByVal tabName As String, Optional ByVal clearAll As Boolean = True)

    Yadyyada(tabName)

    If clearAll = True Then
        DoMoreStuff
    End If

End Sub
于 2012-08-08T12:18:08.520 に答える