使用函数 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中不起作用?
无法生成 Prisma 客户端,outputDir.endsWith 不是函数