嘿,我不熟悉在VB.Net中使用Dictionary,并试图弄清楚如何使用try catch来检查正确的变量类型是否输入以及空条目除外。我很困惑的困难部分是为用户添加错误处理消息。我想在catch中输出每个不正确的键和变量。
例如
Dim dblTravel = New Dictionary(Of String, Double)
dblTravel.Add("Travel_Days", CDbl(txtTravelDays.Text))
dblTravel.Add("Private_Vehicle_Miles", CDbl(txtPrivateVehicleMiles.Text))
dblTravel.Add("Lodging_Per_Night", CDbl(txtLodgingPerNight.Text))
dblTravel.Add("Travel_Total", Nothing)
Dim dblExpenses = New Dictionary(Of String, Double)
dblExpenses.Add("Airfare", CDbl(txtAirfare.Text))
dblExpenses.Add("Car_Rental_Fees", CDbl(txtCarRentalFees.Text))
dblExpenses.Add("Parking_Fees", CDbl(txtParkingFees.Text))
dblExpenses.Add("Taxi_Charges", CDbl(txtTaxiCharges.Text))
dblExpenses.Add("Registration_Fees", CDbl(txtRegistationFees.Text))
dblExpenses.Add("Meals", CDbl(txtMeals.Text))
这是我的两个字典变量,带有自己的索引键。我想将try catch合并在一起,并且对于每个键值类型都不是正确的数据类型或空值我想在用户的错误消息中输出它。
输出示例
应记录这些类型的错误并将其显示在用户的错误处理消息中。示例输出中的那些是输出显示的示例以及我想要检查的两个错误。
提前感谢您一眼,希望您能提供帮助。
答案 0 :(得分:1)
Try/Catch
对于基本数据验证来说有点过分。当你无法预见可能出现的问题时使用它 - 你已经给出了用户输入应该遵循的规则,所以你知道要检查什么。
假设有一些button_ok Click事件:
Sub ok_click(....)
Dim travelDays As Integer ' double is overkill too
Dim AirFare as Decimal ' Decimal is better than Double for Money
Dim TaxiFare as Decimal
If Integer.TryParse(tbTravelDays.Text, travelDays) = False Then
' the contents of the control cannot be converted to a integer value.
' complain to user; MessageBox.Show then
Exit Sub
Else
' the TryParse passed, so travelDays is a valid integer
' you might also want to check that it is not negative!
End If
If Decimal.TryParse(tbTaxi.Text, TaxiFare ) = False Then
' the contents of the control cannot be converted to a decimal value.
' complain to user; MessageBox.Show then
Exit Sub
Else
' passes too
' your "not empty" rule probably means they have to enter a number,
End If
如果一切顺利(数据验证),那些变量将具有他们输入的值。所以接下来:
' procedure to recieve the values and add them
AddValuesToDictionary(travelDays, AirFare, TaxiFare)
你必须稍微改变一下 - 你的词典是当前的(字符串,双精度),我将其转换为十进制,唯一的奇怪是TravelDays
,可能是Integer
。
您 知道您的词典会为任何键(例如“TravelDays”)保留一(1)个条目吗?如果你试图为几个员工收集价值,每个人都有自己的旅行费用,它就会爆炸。