使用函数 EndsWith() 选择案例

Posted

技术标签:

【中文标题】使用函数 EndsWith() 选择案例【英文标题】:Select Case with Function EndsWith() 【发布时间】:2012-10-19 19:45:08 【问题描述】:

下面的代码有效,但我不禁想到有更好的方法来做到这一点。有没有人有将函数与 Select 语句结合使用的经验。 我期望工作的代码将是类似的东西......

Select Case File.EndsWith()
Case "example 1", Case "example2"

此代码有效:

Select Case File.EndsWith(File)
    Case tFile.EndsWith("FileA.doc")
        sbExisting.AppendLine(Report.sbStart.ToString)
        sbExisting.AppendLine(Report.sbHeaders.ToString)
        sbExisting.AppendLine(Report.sbItems.ToString)
        sbExisting.AppendLine(Report.sbSubreport.ToString)
        sbExisting.AppendLine(Report.sbEnd.ToString)
        sbExisting.AppendLine(Report.sbCol.ToString)
    Case tFile.EndsWith("FileB.doc")
        'Slave
        sbExisting.AppendLine(Report.sbStart.ToString)
        sbExisting.AppendLine(Report.sbItems.ToString)
        sbExisting.AppendLine(Report.sbHeaders.ToString)
        sbExisting.AppendLine(Report.sbCol.ToString)
        sbExisting.AppendLine(Report.sbEnd.ToString)
End Select

【问题讨论】:

我认为只有Select Case True 会做到这一点,而不是Select Case tFile.EndsWith(tFile)(无论如何这永远都是真的) 它实际上与上面的代码一样工作;正确区分这两种情况。 某事按预期工作并不意味着它高效或简单。 我完全同意。我只是澄清代码本身可以正常工作。我的帖子的目的是找到一个雄辩的解决方案。 【参考方案1】:

.EndsWith() 返回真或假。这就是你所拥有的。

如果你确实想使用Select,那么惯用的方式是

Select Case True
    Case tFile.EndsWith("MSMaster.tmp")
        ...
    Case tFile.EndsWith("MSSlave.tmp")
        ...
End Select

在同一行有多个选择不会有太大区别:

Select Case True
    Case tFile.EndsWith("example 1"), tFile.EndsWith("example 2")
        ...
    Case tFile.EndsWith("example 3"), tFile.EndsWith("example 4")
        ...
End Select

如果你已经在一个数组/列表/集合中有一个选项列表,你也可以使用

Dim choices1 = New String() "example 1", "example 2"
Dim choices2 = New String() "example 3", "example 4"

Select Case True
    Case choices1.Any(Function(s) tFile.EndsWith(s))
        ...
    Case choices2.Any(Function(s) tFile.EndsWith(s))
        ...
End Select

如果您愿意,也可以执行相同的内联:

Select Case True
    Case (New String() "example 1", "example 2").Any(Function(s) tFile.EndsWith(s))
        ...
    Case (New String() "example 3", "example 4").Any(Function(s) tFile.EndsWith(s))
        ...
End Select

【讨论】:

你的第一篇文章正是我所需要的。【参考方案2】:

这两种情况的唯一区别是附加了sbSubreport 项。这是唯一需要特殊检查的项目,可以像下面这样完成

Dim master = tFile.EndsWith("MSMaster.tmp")
Dim slave = tFile.EndsWith("MSSlave.tmp")
If master OrElse slave Then
    sbExisting.AppendLine(Report.sbStart.ToString)
    sbExisting.AppendLine(Report.sbHeaders.ToString)
    sbExisting.AppendLine(Report.sbItems.ToString)
    If master Then
        sbExisting.AppendLine(Report.sbSubreport.ToString)
    End If
    sbExisting.AppendLine(Report.sbEnd.ToString)
    sbExisting.AppendLine(Report.sbCol.ToString)
End If

【讨论】:

代码只是实际项目的原型。此解决方案仅适用于特定情况。都很有趣。

以上是关于使用函数 EndsWith() 选择案例的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript endsWith在IEv10中不起作用?

ECMAScript6字符串的扩展

Python的startswith与endswith函数

无法生成 Prisma 客户端,outputDir.endsWith 不是函数

Python startswith()函数 与 endswith函数

PHP中的startsWith()和endsWith()函数