Chr*_*eah 2 vb.net asp.net web
我正在使用 ASP Web 窗体和 VB 后端创建太阳能光伏计算器。我只是看着我的代码,作为一个 VB.NET 开发新手,我只是想知道是否有办法做一些不同的事情,减少代码行数或类似的东西。这是y代码的一个繁琐部分:
Dim SR As Integer
'Store radiation value
If drpDwnRoofFacing.Text = "South" And drpAngleOfRoof.Text = "Horizontal" Then
SR = 933
ElseIf drpDwnRoofFacing.Text = "SE/SW" And drpAngleOfRoof.Text = "Horizontal" Then
SR = 933
ElseIf drpDwnRoofFacing.Text = "E/W" And drpAngleOfRoof.Text = "Horizontal" Then
SR = 933
ElseIf drpDwnRoofFacing.Text = "NE/NW" And drpAngleOfRoof.Text = "Horizontal" Then
SR = 933
ElseIf drpDwnRoofFacing.Text = "North" And drpAngleOfRoof.Text = "Horizontal" Then
SR = 933
ElseIf drpDwnRoofFacing.Text = "South" And drpAngleOfRoof.Text = "30 Degrees" Then
SR = 1042
ElseIf drpDwnRoofFacing.Text = "SE/SW" And drpAngleOfRoof.Text = "30 Degrees" Then
SR = 997
ElseIf drpDwnRoofFacing.Text = "E/W" And drpAngleOfRoof.Text = "30 Degrees" Then
SR = 886
ElseIf drpDwnRoofFacing.Text = "NE/NW" And drpAngleOfRoof.Text = "30 Degrees" Then
SR = 762
ElseIf drpDwnRoofFacing.Text = "North" And drpAngleOfRoof.Text = "30 Degrees" Then
SR = 709
ElseIf drpDwnRoofFacing.Text = "South" And drpAngleOfRoof.Text = "45 Degrees" Then
SR = 1023
ElseIf drpDwnRoofFacing.Text = "SE/SW" And drpAngleOfRoof.Text = "45 Degrees" Then
SR = 968
ElseIf drpDwnRoofFacing.Text = "E/W" And drpAngleOfRoof.Text = "45 Degrees" Then
SR = 829
ElseIf drpDwnRoofFacing.Text = "NE/NW" And drpAngleOfRoof.Text = "45 Degrees" Then
SR = 666
ElseIf drpDwnRoofFacing.Text = "North" And drpAngleOfRoof.Text = "45 Degrees" Then
SR = 621
ElseIf drpDwnRoofFacing.Text = "South" And drpAngleOfRoof.Text = "60 Degrees" Then
SR = 960
ElseIf drpDwnRoofFacing.Text = "SE/SW" And drpAngleOfRoof.Text = "60 Degrees" Then
SR = 900
ElseIf drpDwnRoofFacing.Text = "E/W" And drpAngleOfRoof.Text = "60 Degrees" Then
SR = 753
ElseIf drpDwnRoofFacing.Text = "NE/NW" And drpAngleOfRoof.Text = "60 Degrees" Then
SR = 580
ElseIf drpDwnRoofFacing.Text = "North" And drpAngleOfRoof.Text = "60 Degrees" Then
SR = 485
ElseIf drpDwnRoofFacing.Text = "South" And drpAngleOfRoof.Text = "Vertical" Then
SR = 724
ElseIf drpDwnRoofFacing.Text = "SE/SW" And drpAngleOfRoof.Text = "Vertical" Then
SR = 684
ElseIf drpDwnRoofFacing.Text = "E/W" And drpAngleOfRoof.Text = "Vertical" Then
SR = 565
ElseIf drpDwnRoofFacing.Text = "NE/NW" And drpAngleOfRoof.Text = "Vertical" Then
SR = 427
ElseIf drpDwnRoofFacing.Text = "North" And drpAngleOfRoof.Text = "Vertical" Then
SR = 360
End If
Run Code Online (Sandbox Code Playgroud)
我建议将这些数据存储在应用程序代码之外,例如存储在数据库中,或者如果没有必要,可以存储在 XML 文件中。但是,即使您要在代码中硬编码转换规则,最好将规则的硬编码与处理和应用规则的逻辑分开。例如,您可以创建一个包含规则的类,如下所示:
Public Class MyRule
Public Sub New(roofFacing As String, angleOfRoof As String, SR As Integer)
_roofFacing = roofFacing
_angleOfRoof = angleOfRoof
_SR = sr
End New
Public ReadOnly Property RoofFacing() As String
Get
Return _roofFacing
End Get
End Property
Private _roofFacing As String
Public ReadOnly Property AngleOfRoof() As String
Get
Return _angleOfRoof
End Get
End Property
Private _angleOfRoofAs String
Public ReadOnly Property SR() As String
Get
Return _SR
End Get
End Property
Private _SR String
End Class
Run Code Online (Sandbox Code Playgroud)
然后,您可以硬编码规则列表的创建,就像它们来自数据库一样,如下所示:
Dim rules As New List(Of MyRule)()
rules.Add(New MyRule("South", "Horizontal", 933))
rules.Add(New MyRule("South", "SE/SW", 933))
' ...
rules.Add(New MyRule("South", Nothing, 933))
Run Code Online (Sandbox Code Playgroud)
然后,If您可以使用一个简单的循环来应用规则,而不是一个巨大的语句,如下所示:
Dim SR As Integer
For Each rule As MyRule In rules
If _
( _
(rule.RoofFacing Is Nothing) OrEsle _
(rule.RoofFacing = drpDwnRoofFacing.Text) _
) AndAlso _
( _
(rule.AngleOfRoof Is Nothing) OrEsle _
(rule.AngleOfRoof = drpAngleOfRoof.Text) _
) Then
SR = rule.SR
Exit For
End If
Next
Run Code Online (Sandbox Code Playgroud)
如您所见,一旦按照这种方式进行设计,将来修改规则或添加其他规则将变得更加容易。但是,您应该真正为这些值使用枚举,而不是字符串。例如:
Public Enum RoofFacings
Any
North
South
EastOrWest
' ...
End Enum
Public Enum AnglesOfRoof
Any
Horizontal
Degrees30
Degrees45
' ...
Vertical
End Enum
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
169 次 |
| 最近记录: |