Vb.net 简化长代码行

Vb.net 简化长代码行,vb.net,Vb.net,我正在创建一个基于使用情况计算每月电费的程序。代码不整洁,看起来也不太……简洁,但它是有效的。我尝试使用数组(在我的课程中还没有学习到),因为当我四处搜索答案时,数组通常是它的解决方案。但是,当我在代码中使用它时,它只计算第二条语句,比如如果我有if…Else if,它只检查Else if,忽略初始的if 我已经创建了另一个类似问题的项目。正如你在下面看到的,这个月只到五月,我必须把它拿到十月 Option Strict On Public Class Form1 Private Sub

我正在创建一个基于使用情况计算每月电费的程序。代码不整洁,看起来也不太……简洁,但它是有效的。我尝试使用数组(在我的课程中还没有学习到),因为当我四处搜索答案时,数组通常是它的解决方案。但是,当我在代码中使用它时,它只计算第二条语句,比如如果我有
if…Else if
,它只检查
Else if
,忽略初始的
if

我已经创建了另一个类似问题的项目。正如你在下面看到的,这个月只到五月,我必须把它拿到十月

Option Strict On
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       
        Dim marTA, aprTA, mayTA As Single

        Dim mar, apr, may As Decimal

        Decimal.TryParse(TextBox1.Text, mar) : Decimal.TryParse(TextBox2.Text, apr)
        Decimal.TryParse(TextBox3.Text, may)

        Select Case True
            Case mar = 0
                marTA = 3D + (3D * 0.06)
                TextBox4.Text = marTA.ToString("C2").Replace("$", "RM ")
            Case mar >= 1 And mar < 201
                marTA = CSng(mar * 0.109)
                TextBox4.Text = marTA.ToString("C2").Replace("$", "RM ")
            Case mar >= 201 And mar < 301
                marTA = CSng((200 * 0.109) + ((mar - 200) * 0.153))
                TextBox4.Text = marTA.ToString("C2").Replace("$", "RM ")
            Case mar >= 301 And mar < 601
                marTA = CSng((200 * 0.109) + (100 * 0.153) + ((mar - 300) * 0.172))
                TextBox4.Text = marTA.ToString("C2").Replace("$", "RM ")
            Case mar >= 601 And mar < 901
                marTA = CSng((200 * 0.109) + (100 * 0.153) + (300 * 0.172) + ((mar - 600) * 0.182))
                TextBox4.Text = marTA.ToString("C2").Replace("$", "RM ")
            Case mar >= 901
                marTA = CSng((200 * 0.109) + (100 * 0.153) + (300 * 0.172) + (300 * 0.182) + ((mar - 900) * 0.215))
                TextBox4.Text = marTA.ToString("C2").Replace("$", "RM ")
        End Select

        Select Case True
            Case apr = 0
                aprTA = 3 + (3 * 0.06)
                TextBox4.Text = aprTA.ToString("C2").Replace("$", "RM ")
            Case apr >= 1 And apr < 201
                aprTA = CSng(apr * 0.109)
                TextBox4.Text = aprTA.ToString("C2").Replace("$", "RM ")
            Case apr >= 201 And apr < 301
                aprTA = CSng((200 * 0.109) + ((apr - 200) * 0.153))
                TextBox4.Text = aprTA.ToString("C2").Replace("$", "RM ")
            Case apr >= 301 And apr < 601
                aprTA = CSng((200 * 0.109) + (100 * 0.153) + ((apr - 300) * 0.172))
                TextBox4.Text = aprTA.ToString("C2").Replace("$", "RM ")
            Case apr >= 601 And apr < 901
                aprTA = CSng((200 * 0.109) + (100 * 0.153) + (300 * 0.172) + ((apr - 600) * 0.182))
                TextBox4.Text = aprTA.ToString("C2").Replace("$", "RM ")
            Case apr >= 901
                aprTA = CSng((200 * 0.109) + (100 * 0.153) + (300 * 0.172) + (300 * 0.182) + ((apr - 900) * 0.215))
                TextBox4.Text = aprTA.ToString("C2").Replace("$", "RM ")
        End Select

        Select Case True
            Case may = 0
                mayTA = 3 + (3 * 0.06)
                TextBox4.Text = mayTA.ToString("C2").Replace("$", "RM ")
            Case may >= 1 And may < 201
                mayTA = CSng(may * 0.109)
                TextBox4.Text = mayTA.ToString("C2").Replace("$", "RM ")
            Case may >= 201 And may < 301
                mayTA = CSng((200 * 0.109) + ((may - 200) * 0.153))
                TextBox4.Text = mayTA.ToString("C2").Replace("$", "RM ")
            Case may >= 301 And may < 601
                mayTA = CSng((200 * 0.109) + (100 * 0.153) + ((may - 300) * 0.172))
                TextBox4.Text = mayTA.ToString("C2").Replace("$", "RM ")
            Case may >= 601 And may < 901
                mayTA = CSng((200 * 0.109) + (100 * 0.153) + (300 * 0.172) + ((may - 600) * 0.182))
                TextBox4.Text = mayTA.ToString("C2").Replace("$", "RM ")
            Case may >= 901
                mayTA = CSng((200 * 0.109) + (100 * 0.153) + (300 * 0.172) + (300 * 0.182) + ((may - 900) * 0.215))
                TextBox4.Text = mayTA.ToString("C2").Replace("$", "RM ")
        End Select
    End Sub
End Class
选项严格打开
公开课表格1
私有子按钮1\u单击(发送者作为对象,e作为事件参数)处理按钮1。单击
昏暗的玛尔塔、阿普塔、梅塔都是单身
3月、4月、5月为十进制
Decimal.TryParse(TextBox1.Text,三月):Decimal.TryParse(TextBox2.Text,四月)
Decimal.TryParse(TextBox3.Text,五月)
选择Case True
案例mar=0
marTA=3D+(3D*0.06)
TextBox4.Text=marTA.ToString(“C2”)。替换(“$”,“RM”)
案例mar>=1和mar<201
marTA=CSng(3月*0.109)
TextBox4.Text=marTA.ToString(“C2”)。替换(“$”,“RM”)
案例mar>=201和mar<301
marTA=CSng((200*0.109)+(200年3月)*0.153))
TextBox4.Text=marTA.ToString(“C2”)。替换(“$”,“RM”)
案例mar>=301和mar<601
marTA=CSng(200*0.109)+(100*0.153)+(300年3月)*0.172))
TextBox4.Text=marTA.ToString(“C2”)。替换(“$”,“RM”)
案例mar>=601和mar<901
marTA=CSng(200*0.109)+(100*0.153)+(300*0.172)+(600年3月)*0.182))
TextBox4.Text=marTA.ToString(“C2”)。替换(“$”,“RM”)
案例3月>=901
marTA=CSng((200*0.109)+(100*0.153)+(300*0.172)+(300*0.182)+(900年3月)*0.215))
TextBox4.Text=marTA.ToString(“C2”)。替换(“$”,“RM”)
结束选择
选择Case True
案例apr=0
aprTA=3+(3*0.06)
TextBox4.Text=aprTA.ToString(“C2”)。替换(“$”,“RM”)
病例apr>=1和apr<201
aprTA=CSng(4月*0.109)
TextBox4.Text=aprTA.ToString(“C2”)。替换(“$”,“RM”)
案例apr>=201和apr<301
aprTA=CSng(200*0.109)+(200年4月)*0.153))
TextBox4.Text=aprTA.ToString(“C2”)。替换(“$”,“RM”)
案例apr>=301和apr<601
aprTA=CSng(200*0.109)+(100*0.153)+(300年4月)*0.172))
TextBox4.Text=aprTA.ToString(“C2”)。替换(“$”,“RM”)
病例apr>=601和apr<901
aprTA=CSng(200*0.109)+(100*0.153)+(300*0.172)+(600年4月)*0.182))
TextBox4.Text=aprTA.ToString(“C2”)。替换(“$”,“RM”)
案例4月>=901
aprTA=CSng(200*0.109)+(100*0.153)+(300*0.172)+(300*0.182)+(900年4月)*0.215))
TextBox4.Text=aprTA.ToString(“C2”)。替换(“$”,“RM”)
结束选择
选择Case True
案例可能=0
mayTA=3+(3*0.06)
TextBox4.Text=mayTA.ToString(“C2”)。替换(“$”,“RM”)
案例可能>=1且可能<201
mayTA=CSng(5月*0.109)
TextBox4.Text=mayTA.ToString(“C2”)。替换(“$”,“RM”)
案例可能大于等于201,且可能小于301
mayTA=CSng(200*0.109)+(200*0.153)
TextBox4.Text=mayTA.ToString(“C2”)。替换(“$”,“RM”)
案例可能>=301且可能<601
梅塔=CSng((200*0.109)+(100*0.153)+(300年5月)*0.172))
TextBox4.Text=mayTA.ToString(“C2”)。替换(“$”,“RM”)
情况可能>=601,也可能<901
mayTA=CSng(200*0.109)+(100*0.153)+(300*0.172)+(600*0.182)
TextBox4.Text=mayTA.ToString(“C2”)。替换(“$”,“RM”)
案例可能>=901
梅塔=CSng((200*0.109)+(100*0.153)+(300*0.172)+(300*0.182)+(900年5月)*0.215))
TextBox4.Text=mayTA.ToString(“C2”)。替换(“$”,“RM”)
结束选择
端接头
末级
设计视图:


编程中有一个缩写词,DRY。它代表不要重复你自己。这其中的几个原因是

  • 更容易调试
  • 更容易改变-只有一个点而不是几个点
  • 更容易阅读和理解
  • 不易出错。如果您多次尝试编写相同的代码,您将在重写时出错
  • 有几种方法可以实现干燥。一种是将重复代码移动到单独的函数。请参见
    GetUsageCharge
    ,了解此示例

    另一种方法是创建相似对象的集合。然后使用循环将重复代码应用于集合中的每个项目。请参见
    文本框
    和每个的

    Private Function GetUsageCharge(usage As Integer) As Decimal
        Select Case usage
            Case 0
                Return CDec(3 + (3 * 0.06))
            Case 1 To 200
                Return CDec(usage * 0.109)
            Case 201 To 300
                Return CDec((200 * 0.109) + ((usage - 200) * 0.153))
            Case 301 To 600
                Return CDec((200 * 0.109) + (100 * 0.153) + ((usage - 300) * 0.172))
            Case 601 To 900
                Return CDec((200 * 0.109) + (100 * 0.153) + (300 * 0.172) + ((usage - 600) * 0.182))
            Case >= 901
                Return CDec((200 * 0.109) + (100 * 0.153) + (300 * 0.172) + (300 * 0.182) + ((usage - 900) * 0.215))
        End Select
        Return 0
    End Function
    
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim TotalCost As Decimal
        Dim usage As Integer
        Dim TextBoxes As New List(Of TextBox) From {TextBox1, TextBox2, TextBox3}
        For Each tb In TextBoxes
            If Integer.TryParse(tb.Text, usage) Then
                TotalCost += GetUsageCharge(usage)
            End If
        Next
        TextBox4.Text = TotalCost.ToString("C2").Replace("$", "RM ")
    End Sub
    
    正如您所看到的,这段代码更简单,变量更少等等

    注意:您可以删除
    。如果添加

    CultureInfo.DefaultThreadCurrentCulture = New CultureInfo("ms-MY")
    

    Form.Load

    中,编程中有一个缩写词DRY。它代表不要重复你自己。这其中的几个原因是

  • 更容易调试
  • 更容易改变-只有一个点而不是几个点
  • 更容易阅读和理解
  • 不易出错。如果您多次尝试编写相同的代码,您将在重写时出错
  • 有几种方法可以实现干燥。一种是将重复代码移动到单独的函数。请参见
    GetUsageCharge
    ,了解此示例

    另一种方法是创建coll