[英]IOrderedEnumerable to vb.net IOrderedEnumerable Conversion
Private Sub UpdateListBox(message As String)
Dim beeGroups As IOrderedEnumerable(Of IGrouping(Of BeeState, Bee)) = From beeGroup In From bee In Me.world.BeesGroup bee By bee.CurrentStateOrder By beeGroup.KeybeeGroup
Me.listBox1.Items.Clear()
For Each beeGroup As IGrouping(Of BeeState, Bee) In beeGroups
Dim s As String
s = If(beeGroup.Count() = 1, String.Empty, "s")
Me.listBox1.Items.Add(Convert.ToString(beeGroup.Key) & ": " & beeGroup.Count() & " bee" & s)
If beeGroup.Key <> BeeState.Idle OrElse beeGroup.Count() <> Me.world.Bees.Count() OrElse Me.framesRun <= 0 Then
Continue For
End If
Me.listBox1.Items.Add("Simulation ended: all bees are idle")
Me.toolStripButtonStartSimulation.Text = "Simulation ended."
Me.statusStrip1.Items(0).Text = "Simulation ended"
Me.timer1.Enabled = False
Next
End Sub
I'm absolutely stuck at this error in the conversion of a c#
project to vb.net
. 在将
c#
项目转换为vb.net
我绝对会卡在此错误中。
I know in c#
it goes like this 我知道在
c#
会像这样
IOrderedEnumerable<IGrouping<BeeState, Bee>> beeGroups = from bee in this.world.Bees
group bee by bee.CurrentState
into beeGroup orderby beeGroup.Key select beeGroup;
But once converted into vb.net
it tries to state everything on one line with the fewest amount of declarations. 但是一旦转换为
vb.net
它将尝试以最少的声明在一行上声明所有内容。
While also in c#
you can get away with c#
: 虽然在
c#
也可以使用c#
:
foreach (IGrouping<BeeState, Bee> beeGroup in beeGroups)
vb.net tries to declare the for statement within itself: vb.net尝试在其内部声明for语句:
For Each group As var In beeGroups
Private Sub UpdateListBox(message As String)
Dim beeGroups = From bee In Me.world.Bees
Group By bee.CurrentState Into beeGroup = Group
Order By beeGroup.Key
Me.listBox1.Items.Clear()
For Each beeGroup In beeGroups
Dim beeCount = beeGroup.Count ' to avoid reevaluation
Dim s = If(beeCount >= 1, String.Empty, "s")
Me.listBox1.Items.Add(Convert.ToString(beeGroup.Key) & ": " & beeCount & " bee" & s)
If beeGroup.Key <> BeeState.Idle OrElse beeCount <> Me.world.Bees.Count OrElse Me.framesRun <= 0 Then
Continue For
End If
Me.listBox1.Items.Add("Simulation ended: all bees are idle")
Me.toolStripButtonStartSimulation.Text = "Simulation ended."
Me.statusStrip1.Items(0).Text = "Simulation ended"
Me.timer1.Enabled = False
Next
End Sub
Your 'For Each' statement is correct (both your C# and VB versions declare the iterator variable within the loop header), however the VB LINQ query should be: 您的“ For Each”语句正确(您的C#和VB版本都在循环头中声明了迭代器变量),但是VB LINQ查询应为:
Dim beeGroups As IOrderedEnumerable(Of IGrouping(Of BeeState, Bee)) = From bee In Me.world.Bees
Group bee By bee.CurrentState Into beeGroup = Group
Order By CurrentState
Select beeGroup
Or user Option Infer On: 或用户选项推断:
Dim beeGroups = From bee In Me.world.Bees
Group bee By bee.CurrentState Into beeGroup = Group
Order By CurrentState
Select beeGroup
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.