【发布时间】:2016-04-05 16:44:23
【问题描述】:
我很不好意思分享这个功能,但我需要帮助来整理它。我很久以前写了这个,只是为了一个非常简单的用途,但它已经失控了,我不知道如何正确处理它。
Public Shared Function SetVariables(msg As String, Optional name As String = "", Optional target As String = "", Optional amount As Decimal = 0, Optional cost As String = "0", Optional keyword As String = "", Optional time As String = "", Optional reward As String = "", Optional participantList As String = "", Optional participantCount As Integer = 0, Optional game As String = "", Optional viewers As String = "", Optional followers As String = "", Optional link As String = "", Optional _options As String = "", Optional Year As String = "", Optional Month As String = "", Optional Day As String = "", Optional Hour As String = "", Optional Minute As String = "", Optional grpname As String = "")
Dim balance As Decimal
Dim holdings As Decimal
If name > "" Then
If Options.Accounts.ContainsKey(name) Then
If Options.Holdings.ContainsKey(Options.Accounts.Item(name)) Then
holdings = Options.Holdings.Item(Options.Accounts.Item(name))
End If
balance = Options.Accounts.Item(name).Points
End If
End If
msg = msg.Replace("[name]", StrConv(name, VbStrConv.ProperCase))
If holdings > 0 Then
msg = msg.Replace("[balance]", balance & "[" & holdings & "]")
Else
msg = msg.Replace("[balance]", balance)
End If
msg = msg.Replace("[channel]", Subs.UppercaseFirstLetter(Options.Channel.TrimStart("#")))
msg = msg.Replace("[target]", Subs.UppercaseFirstLetter(target))
msg = msg.Replace("[amount]", amount)
msg = msg.Replace("[cost]", cost)
msg = msg.Replace("[keyword]", keyword)
msg = msg.Replace("[time]", time)
msg = msg.Replace("[reward]", reward)
msg = msg.Replace("[participantList]", participantList)
msg = msg.Replace("[participantCount]", participantCount)
msg = msg.Replace("[botname]", Subs.UppercaseFirstLetter(Options.User))
If msg.Contains("[groups]") Then msg = msg.Replace("[groups]", GetSortedGroups(name))
If msg.Contains("[group]") Then msg = msg.Replace("[group]", GetSortedGroups(name, True))
msg = msg.Replace("[game]", StrConv(game, VbStrConv.ProperCase))
msg = msg.Replace("[viewers]", viewers)
msg = msg.Replace("[followers]", followers)
msg = msg.Replace("[link]", link)
msg = msg.Replace("[options]", options.ToUpper)
msg = msg.Replace("[years]", Year)
msg = msg.Replace("[months]", Month)
msg = msg.Replace("[days]", Day)
msg = msg.Replace("[hours]", Hour)
msg = msg.Replace("[minutes]", Minute)
msg = msg.Replace("[grpname]", StrConv(grpname, VbStrConv.ProperCase))
If balance = 1 Or amount = 1 Then
msg = msg.Replace("[currency]", Options.PName)
Else
msg = msg.Replace("[currency]", Options.PNames)
End If
Return msg
End Function
基本上,我将一个字符串传递给这个函数,它包含其中的一些:[name] [keyword] 等,将被替换为其他内容。有时我还必须传递数据以替换那些数据,这就是问题开始的地方。我希望这些在同一个函数中,但我现在有很多参数。我从来没有在一次函数调用中使用所有这些参数,随着时间的推移,我会添加更多的参数。
关于如何更好地处理此类事情的任何建议?我应该把这个功能拆开并单独处理替换吗?
【问题讨论】:
-
由这些参数组成的类应该更简洁
-
你可能是对的。我实际上考虑过这样做,但后来忘记了这个想法。谢谢!
-
@Plutonix 使用我在我的 OP 中分享的内容,您能否编写一个粗略的示例来说明如何构建此类?使用这个类时,我仍然觉得我的字符串很长,但也许我看错了。
-
好吧,如果它是我的代码,我会使用一个类,并且该过程将是其中的一个方法。如果可能的话,而不是将
msg字符串破解为位,我会使用 StringBuilder 来构造它。不过我不知道其他一些方法是做什么的。 -
...听起来你构建了传递给它的字符串,所以我会尝试从头开始构建它,而不是占位符 (
[Name])。
标签: vb.net function optional-parameters