Vb.net 简化select case语句以避免干燥

Vb.net 简化select case语句以避免干燥,vb.net,select,refactoring,dry,Vb.net,Select,Refactoring,Dry,如何重构此代码以避免重复?特别是如果有更多的情况!我读过关于用词汇简化某些案例的书,但我不知道如何在这种情况下使用它。有什么建议吗 Dim sPath As String = String.Empty Dim aThing As Decimal Select Case True Case (aThing < 7.5) sPath = "~/images/Grafik_7.5.png" Case (aThing

如何重构此代码以避免重复?特别是如果有更多的情况!我读过关于用词汇简化某些案例的书,但我不知道如何在这种情况下使用它。有什么建议吗

    Dim sPath As String = String.Empty
    Dim aThing As Decimal

    Select Case True
        Case (aThing < 7.5)
            sPath = "~/images/Grafik_7.5.png"
        Case (aThing >= 7.5 AndAlso aThing < 8.75)
            sPath = "~/images/Grafik_18.75.png"
        Case (aThing >= 58.75 AndAlso aThing < 60)
            sPath = "~/images/Grafik_60.png"
        Case (aThing >= 60 AndAlso aThing < 61.25)
            sPath = "~/images/Grafik_61.25.png"
        Case (aThing >= 61.25 AndAlso aThing < 62.5)
            sPath = "~/images/Grafik_62.5.png"
        Case (aThing >= 62.5 AndAlso aThing < 63.75)
            sPath = "~/images/Grafik_63.75.png"
        Case (aThing >= 63.75 AndAlso aThing < 65)
            sPath = "~/images/Grafik_65.png"
        Case (aThing >= 65 AndAlso aThing < 66.25)
            sPath = "~/images/Grafik_66.25.png"
        Case (aThing >= 66.25)
            sPath = "~/images/Grafik_67.5.png"
    End Select
Dim sPath As String=String.Empty
十进制的
选择Case True
病例(aThing<7.5)
sPath=“~/images/Grafik_7.5.png”
案例(aThing>=7.5,aThing<8.75)
sPath=“~/images/Grafik_18.75.png”
案例(aThing>=58.75,且aThing<60)
sPath=“~/images/Grafik_60.png”
案例(aThing>=60且aThing<61.25)
sPath=“~/images/Grafik_61.25.png”
案例(aThing>=61.25,且aThing<62.5)
sPath=“~/images/Grafik_62.5.png”
案例(aThing>=62.5,且aThing<63.75)
sPath=“~/images/Grafik_63.75.png”
案例(aThing>=63.75,且aThing<65)
sPath=“~/images/Grafik_65.png”
案例(aThing>=65,且aThing<66.25)
sPath=“~/images/Grafik_66.25.png”
案例(aThing>=66.25)
sPath=“~/images/Grafik_67.5.png”
结束选择

这可能需要根据最大数值的大小稍微改变,但我的想法是这样的:

    Dim values = {7.5D, 18.75D, 60D, 61.25D} 'etc.
    Dim value = values.First(Function(x) x > aThing)

    sPath = $"~images/Grafik_{value}.png
Dim conditions = new Dictionary(of Predicate(of Double), String) From
{
    {Function(a) a < 7.5, "Grafik_7.5.png"},
    {Function(a) a >= 7.5 AndAlso a <= 8.75, "Grafik_8.75.png"},
    {Function(a) a >= 58.75 AndAlso a < 60, "Grafik_60.png"} 
}

Dim aThing = 8.3
Dim result = conditions.Single(Function (c) c.Key(aThing)).Value
Dim sizes = new List(Of Double) From {7.5, 8.75, 60, 61.25} 

Dim InvC = System.Globalization.CultureInfo.InvariantCulture
DIm size = sizes.First(Function(s) s > aThing).ToString(InvC)

Dim result = "Grafik_" + size + ".png"

使用字典,您可以这样做:

    Dim values = {7.5D, 18.75D, 60D, 61.25D} 'etc.
    Dim value = values.First(Function(x) x > aThing)

    sPath = $"~images/Grafik_{value}.png
Dim conditions = new Dictionary(of Predicate(of Double), String) From
{
    {Function(a) a < 7.5, "Grafik_7.5.png"},
    {Function(a) a >= 7.5 AndAlso a <= 8.75, "Grafik_8.75.png"},
    {Function(a) a >= 58.75 AndAlso a < 60, "Grafik_60.png"} 
}

Dim aThing = 8.3
Dim result = conditions.Single(Function (c) c.Key(aThing)).Value
Dim sizes = new List(Of Double) From {7.5, 8.75, 60, 61.25} 

Dim InvC = System.Globalization.CultureInfo.InvariantCulture
DIm size = sizes.First(Function(s) s > aThing).ToString(InvC)

Dim result = "Grafik_" + size + ".png"

如果您确实想坚持使用
选择案例
,那么在每个
案例
上指定一个下限是没有意义的,因为您已经通过不匹配以前的任何案例来保证满足这一要求。您应该使用
不变量文化
;否则,根据此代码运行的机器的区域性设置,
sPath
可能是例如
…Grafik_18,75.png
而不是
…Grafik_18.75.png
这确实是真的,但我确实说过类似的话。