C# VB6中具有默认值的可选参数

C# VB6中具有默认值的可选参数,c#,vb6,C#,Vb6,我试图在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

我试图在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
到目前为止,除了默认参数之外,一切都很好。我可以在方法签名中以与在C中相同的方式为clearAll指定一个默认值true吗?还是只需要在方法开始时这样做


谢谢

哇,这让我想起了。。我能问一下你为什么要在技术上向后转换吗

无论如何,您可以使用可选关键字:

Private Sub ChangeTab(ByVal tabName As String, Optional ByVal clearAll As Boolean = True)
您的问题正在使用ByVal。从内存来看,VB6中的所有内容都是ByVal,除非明确说明


编辑:我错了。默认值为ByRef。。好久不见了

哇,这让我回想起。。我能问一下你为什么要在技术上向后转换吗

无论如何,您可以使用可选关键字:

Private Sub ChangeTab(ByVal tabName As String, Optional ByVal clearAll As Boolean = True)
您的问题正在使用ByVal。从内存来看,VB6中的所有内容都是ByVal,除非明确说明

编辑:我错了。默认值为ByRef。。好久不见了

试试看:

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

    Call Yadyyada(tabName)

    If clearAll Then
        DoMoreStuff
    End If

End Sub
请参见尝试:

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

    Call Yadyyada(tabName)

    If clearAll Then
        DoMoreStuff
    End If

End Sub

请参见

是的,您可以执行与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是的,您可以执行与C中相同的操作

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

ChangeTab("AName")

将打印为真

您可以像这样使用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
我错了!为可选参数设置默认真值并在代码中检查此值是最佳解决方案

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

    Yadyyada(tabName)

    If clearAll = True Then
        DoMoreStuff
    End If

End Sub

您可以像这样使用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
我错了!为可选参数设置默认真值并在代码中检查此值是最佳解决方案

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

    Yadyyada(tabName)

    If clearAll = True Then
        DoMoreStuff
    End If

End Sub

我试着在单词“As Boolean”后面加上=True,但是我得到了一个编译error@JMK:您确定编译错误与其他内容无关吗?例如,VB6中的YADYADABATNAME语句不正确。我曾尝试在单词“As Boolean”后放置=True,但得到了编译结果error@JMK:您确定编译错误与其他内容无关吗?例如,VB6中的YADYADABDATANAME语句不正确;缺少的是事实。但是,是的,怀旧之旅!clearAll可能应该是显式的ByVal;默认值是ByRef iircYeah我更新了我的答案。我被这件事吓坏了,忘了把OP版本的实际问题包括在内!非常感谢!不是真的向后转换,只是尝试用一种语言做一些我知道如何用另一种语言做的事情!他有选择权;缺少的是事实。但是,是的,怀旧之旅!clearAll可能应该是显式的ByVal;默认值是ByRef iircYeah我更新了我的答案。我被这件事吓坏了,忘了把OP版本的实际问题包括在内!非常感谢!不是真的向后转换,只是尝试用一种语言做一些我知道如何用另一种语言做的事情!这行不通。IsMissing不适用于VB6中的布尔值。看,这行不通。IsMissing不适用于VB6中的布尔值。请参阅:+1以获取文档链接。为什么没有人读这些文档?@MarkJ:可能是因为现在很难找到VB6的文档。AFAIR,在.NET开始使用之后,VB6文档被从原来的位置删除。新的位置很难找到。我不确定它是否链接到主msdn站点上的任何位置。我找不到它。我只找到了迁移说明等,我不得不用谷歌搜索了很多。现在搜索结果大多是VB.NET。如果名称相似,则很难对其进行筛选。+1用于链接到文档。为什么没有人读这些文档?@MarkJ:可能是因为现在很难找到VB6的文档。AFAIR,在.NET开始使用之后,VB6文档被从原来的位置删除。新的位置很难找到。我不确定它是否链接到主msdn站点上的任何位置。我找不到它。我只找到了迁移说明等,我不得不用谷歌搜索了很多。现在搜索结果大多是VB.NET。使用相似的名称很难过滤它们。