Vb.net 使用函数解决Visual Basic.Net参数未指定错误

Vb.net 使用函数解决Visual Basic.Net参数未指定错误,vb.net,Vb.net,初学者VisualBasic编码器-如果需要,icnldued所有代码,但是decTotalCharges=ComputeCharges(intDays、DecMcCharges、decSCharges、decLabFees、DecHabFees)让我很为难-一个错误显示“未为“公共函数计算更改…”的参数“DecHabFees”指定参数…” 你知道如何解决这个问题吗?或者有什么建议可以简化这个代码吗?这是一个大学项目,哈哈 Option Strict Public Class Form1

初学者VisualBasic编码器-如果需要,icnldued所有代码,但是
decTotalCharges=ComputeCharges(intDays、DecMcCharges、decSCharges、decLabFees、DecHabFees)
让我很为难-一个错误显示“未为“公共函数计算更改…”的参数“DecHabFees”指定参数…” 你知道如何解决这个问题吗?或者有什么建议可以简化这个代码吗?这是一个大学项目,哈哈

Option Strict 
Public Class Form1
   Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click
    'Declare variables
    Dim intDays As Integer
    Dim decMCharges As Decimal
    Dim decSCharges As Decimal
    Dim decLabFees As Decimal
    Dim decRehabFees As Decimal
    Dim decTotalCharges As Decimal
    Dim decTax As Decimal
    Dim decTotal As Decimal

    Try
        GetInfo(intDays, decMCharges, decSCharges, decLabFees, decRehabFees)
        decTotalCharges = ComputeCharges(intDays, decMCharges, decSCharges, decLabFees, decRehabFees)
        decTax = ComputeTax(decTotalCharges, decTax)
        decTotal = ComputeTotal(decTotalCharges, decTax, decTotal)
        Display(decTotalCharges, decTax, decTotal)
    Catch ex As Exception

    End Try
End Sub
Sub GetInfo(ByRef intDays As Integer, ByRef decMCharges As Decimal, ByRef decSCharges As Decimal, ByRef decLabFees As Decimal, ByRef decRehabFees As Decimal)
    'Recieves values
    intDays = CInt(txtDays.Text)
    decMCharges = CDec(txtMCharges.Text)
    decSCharges = CDec(txtSCharges.Text)
    decLabFees = CDec(txtLabFees.Text)
    decRehabFees = CDec(txtRehabFees.Text)
End Sub
Function ComputeCharges(ByRef decTotalCharges As Decimal, ByVal intDays As Integer, ByVal decMCharges As Decimal, ByVal decSCharges As Decimal, ByVal decLabFees As Decimal, ByVal decRehabFees As Decimal) As Decimal
    'GetInfo(intDays, decMCharges, decSCharges, decLabFees, decRehabFees)
    decTotalCharges = CDec(intDays * 300) + decMCharges + decSCharges + decLabFees + decRehabFees
End Function
Function ComputeTax(ByVal decTotalCharges As Decimal, ByRef decTax As Decimal) As Decimal
    decTax = CDec(decTotalCharges * 0.07)
End Function
Function ComputeTotal(ByVal decTotalCharges As Decimal, ByVal decTax As Decimal, ByRef decTotal As Decimal) As Decimal
    decTotal = decTotalCharges + decTax
End Function
Function Display(ByVal decTotalCharges As Decimal, ByVal decTax As Decimal, ByVal decTotal As Decimal) As String
    lblTax.Text = decTax.ToString("c")
    lblTotal.Text = decTotal.ToString("c")
    lblTotalCharges.Text = decTotalCharges.ToString("c")
End Function

End类

ComputeCharges
需要6个参数。您只需要为它提供5个参数。您需要提供第一个参数,
ByRef decTotalCharges作为十进制
ComputeCharges
需要6个参数。您只需要为它提供5个参数。您需要提供第一个参数,
ByRef decTotalCharges作为十进制
你在创建单作业方法方面做得很好,但我认为你有点过火了。如果你的函数只有一行代码,那么传递ByRef参数没有多大意义。我希望在文本框的验证事件中看到验证代码。不要依赖异常处理来处理可预防的异常

.TryParse返回一个布尔值,并用正确的数据类型填充提供的变量

在.net中使用函数时,它们需要返回类型和与函数类型匹配的返回语句

Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click
    'Validate user input
    Dim intDays As Integer
    If Not Integer.TryParse(txtDays.Text, intDays) Then
        MessageBox.Show("Fill in Days with a number")
        Exit Sub
    End If
    Dim decMCharges As Decimal
    If Not Decimal.TryParse(txtMCharges.Text, decMCharges) Then
        MessageBox.Show("Fill in MCharges with a number")
        Exit Sub
    End If
    Dim decSCharges As Decimal
    If Not Decimal.TryParse(txtSCharges.Text, decSCharges) Then
        MessageBox.Show("Fill in SCharges with a number")
        Exit Sub
    End If
    Dim decLabFees As Decimal
    If Not Decimal.TryParse(txtLabFees.Text, decLabFees) Then
        MessageBox.Show("Fill in LabFees with a number")
        Exit Sub
    End If
    Dim decRehabFees As Decimal
    If Not Decimal.TryParse(txtRehabFees.Text, decRehabFees) Then
        MessageBox.Show("Fill in RehabFees with a number")
        Exit Sub
    End If
    'Compute charges
    Dim decTotalCharges As Decimal
    Dim decTax As Decimal
    Dim decTotal As Decimal
    decTotalCharges = intDays * 300 + decMCharges + decSCharges + decLabFees + decRehabFees
    decTax = decTotalCharges * 0.07D
    decTotal = decTotalCharges + decTax
    'Display
    lblTax.Text = decTax.ToString("c")
    lblTotal.Text = decTotal.ToString("c")
    lblTotalCharges.Text = decTotalCharges.ToString("c")
End Sub

您在创建单作业方法方面做得很好,但我认为您有点过火了。如果您的函数只有一行代码,那么传递ByRef参数就没有多大意义。我希望在文本框的验证事件中看到验证代码。不要依赖异常处理来处理可预防的异常。

.TryParse返回一个布尔值,并用正确的数据类型填充提供的变量

在.net中使用函数时,它们需要返回类型和与函数类型匹配的返回语句

Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click
    'Validate user input
    Dim intDays As Integer
    If Not Integer.TryParse(txtDays.Text, intDays) Then
        MessageBox.Show("Fill in Days with a number")
        Exit Sub
    End If
    Dim decMCharges As Decimal
    If Not Decimal.TryParse(txtMCharges.Text, decMCharges) Then
        MessageBox.Show("Fill in MCharges with a number")
        Exit Sub
    End If
    Dim decSCharges As Decimal
    If Not Decimal.TryParse(txtSCharges.Text, decSCharges) Then
        MessageBox.Show("Fill in SCharges with a number")
        Exit Sub
    End If
    Dim decLabFees As Decimal
    If Not Decimal.TryParse(txtLabFees.Text, decLabFees) Then
        MessageBox.Show("Fill in LabFees with a number")
        Exit Sub
    End If
    Dim decRehabFees As Decimal
    If Not Decimal.TryParse(txtRehabFees.Text, decRehabFees) Then
        MessageBox.Show("Fill in RehabFees with a number")
        Exit Sub
    End If
    'Compute charges
    Dim decTotalCharges As Decimal
    Dim decTax As Decimal
    Dim decTotal As Decimal
    decTotalCharges = intDays * 300 + decMCharges + decSCharges + decLabFees + decRehabFees
    decTax = decTotalCharges * 0.07D
    decTotal = decTotalCharges + decTax
    'Display
    lblTax.Text = decTax.ToString("c")
    lblTotal.Text = decTotal.ToString("c")
    lblTotalCharges.Text = decTotalCharges.ToString("c")
End Sub

您的几个方法实现得很差。例如,
ComputeTax
被声明为
函数
,但它不返回任何内容,尽管您使用的是单个输出参数。该函数应声明为
函数ComputeTax(DectTotalCharges为十进制)作为十进制数,然后执行
返回decTotalCharges*0.07D
,然后调用
decTax=ComputeTax(decTotalCharges)
。其他几个方法也应该进行类似的更改。在决定如何声明方法时,您需要考虑是否有输出、有多少个输出项以及多个项是否等效。没有输出意味着一个
,单个输出意味着一个
函数
,两者都没有
ByRef
参数。如果有多个输出,则至少需要一个
ByRef
参数。如果有一个“主”输出,则使用
函数
并返回该函数,其余部分使用
ByRef
参数,例如
Integer.TryParse
。如果没有单个“主”输出“输出,使用
Sub
和所有
ByRef
参数。您的课程导师是否特别指示您使用ByRef?”?它的存在使您的代码变得错综复杂,应该将其完全剥离。我们有从函数返回多个值的方法(编写自己的类或使用ValueTuple)。ByRef几乎不应该被使用;您在这个代码块中使用它的次数比我在过去10年的商业编码中使用的次数要多,因为您的一些方法实现得很差。例如,
ComputeTax
被声明为
函数
,但它不返回任何内容,尽管您使用的是单个输出参数。该函数应声明为十进制的
function ComputeTax(decTotalCharges为十进制)
,然后实现
Return decTotalCharges*0.07D
,然后调用
decTax=ComputeTax(decTotalCharges)
。在决定如何声明方法时,您需要考虑是否有输出、有多少个输出项以及多个项是否等效。无输出意味着一个
Sub
,单个输出意味着一个
函数
,两者都没有
ByRef
参数。如果有多个输出,则至少需要一个
ByRef
参数。如果有一个“主要”输出,则使用
函数
并使用
ByRef
参数返回该输出,其余的参数为
Integer.TryParse
。如果没有单个“主要”输出,请使用
Sub
和所有
ByRef
参数。您的课程导师是否特别指示您使用ByRef?它的存在使您的代码变得错综复杂,应该将其完全剥离。我们有从函数返回多个值的方法(编写自己的类或使用ValueTuple)。ByRef几乎不应该被使用;你在这个代码块中使用它的次数比我在过去10年中作为日常工作使用商业编码的次数要多。不,实际上我认为这只是治疗症状,而不是因果关系。事实上,我认为这只是治疗症状,而不是因果关系。玛丽必须遵循特定的指示,虽然我确实喜欢.TryParse函数。谢谢。Mary必须遵循特定的说明,尽管我确实喜欢.TryParse函数。