我正在为列表框创建一个随机骰子生成器,我有一个 numericUpDown 控件,用于表示每种类型的骰子将掷出多少个。我当前的代码如下:
RollValue = rand.Next(4) + 1
lstRoller.Items.Add(numD4UpDown.Value.ToString() & "D4 - " & RollValue.ToString())
其中 lstRoller 是我要添加骰子的列表框,Roll Value 是我的变量,numD4UpDown 是我的 NumericUpDown。这适用于单个骰子滚动,但我希望能够在我的上下控件中为每个大于 1 的数字添加一个额外的骰子,而不必为每个数字上下控件可能性编写 if 语句。
理想情况下,它看起来像这样:
RollValue = rand.Next(4) + 1
lstRoller.Items.Add(numD4UpDown.Value.ToString() & "D4 - " & RollValue.ToString() & If numD4UpDown.Value(Pseudocode past this point).Count > 1 then do create variable = rand.Next(4) + 1 loop until NumberOfVariables = numD4UpDown.Value.Count)
有什么方法可以让我不必创建单独的 If 语句?
在我的上下控件中,为每个大于 1 的数字添加一个额外的骰子辊
因此,掷骰子的总数基本上等于数字Updown中的数字。
带 For 循环
Private rand As New Random()
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
For i As Integer = 1 To Convert.ToInt32(numD4UpDown.Value)
Dim rollValue = rand.Next(4) + 1
lstRoller.Items.Add(String.Format("{0}D4 - {1}", i, rollValue))
Next
End Sub
如果要将它们全部放在一行上,可以将 For 循环替换为
lstRoller.Items.Add(
Enumerable.Range(1, Convert.ToInt32(numD4UpDown.Value)).
Select(
Function(i)
Dim RollValue = rand.Next(4) + 1
Return String.Format("{0}D4 - {1}", i, RollValue)
End Function).
Aggregate(Function(s1, s2) s1 & " " & s2))