我为列表框创建了一个随机骰子生成器,我有一个numericUpDown控件,用于表示每种类型的骰子将被滚动的数量。我目前的代码如下:
RollValue = rand.Next(4) + 1
lstRoller.Items.Add(numD4UpDown.Value.ToString() & "D4 - " & RollValue.ToString())
其中lstRoller是我要添加骰子的列表框,Roll Value是我的变量,numD4UpDown是我的NumericUpDown。这适用于单个掷骰子,但我希望能够在我的updown控件中为每个大于1的数字添加额外的掷骰子,而不必为每个numericUpDown控件可能性编写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语句的地方?
答案 0 :(得分:1)
在我的更新控件
中为每个大于1的数字添加额外的掷骰子
因此,掷骰子的总数基本上等于NumericUpDown中的数字。
使用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))