mar*_*c.d 7 .net linq vb.net group-by
我尝试像在C#中那样使用匿名类型,但结果不正确.
VB.NET示例(错误输出):
Module Module1
Sub Main()
Dim ls As List(Of Employee) = New List(Of Employee)
ls.Add(New Employee With {.Age = 20, .Sex = "M"})
ls.Add(New Employee With {.Age = 20, .Sex = "M"})
ls.Add(New Employee With {.Age = 20, .Sex = "M"})
ls.Add(New Employee With {.Age = 30, .Sex = "F"})
ls.Add(New Employee With {.Age = 30, .Sex = "F"})
For Each item In ls.GroupBy(Function(k) New With {.Age = k.Age, .Sex = k.Sex})
Console.WriteLine(String.Format("Group [Age: {0}, Sex: {1}] : {2} Item(s)", item.Key.Age, item.Key.Sex, item.Count()))
Next
Console.ReadLine()
End Sub
Class Employee
Private _Age As Integer
Public Property Age() As Integer
Get
Return _Age
End Get
Set(ByVal value As Integer)
_Age = value
End Set
End Property
Private _Sex As String
Public Property Sex() As String
Get
Return _Sex
End Get
Set(ByVal value As String)
_Sex = value
End Set
End Property
End Class
End Module
Run Code Online (Sandbox Code Playgroud)
输出:
Group [Age: 20, Sex: M] : 1 Item(s)
Group [Age: 20, Sex: M] : 1 Item(s)
Group [Age: 20, Sex: M] : 1 Item(s)
Group [Age: 30, Sex: F] : 1 Item(s)
Group [Age: 30, Sex: F] : 1 Item(s)
Run Code Online (Sandbox Code Playgroud)
期望的输出:
Group [Age: 20, Sex: M] : 3 Item(s)
Group [Age: 30, Sex: F] : 2 Item(s)
Run Code Online (Sandbox Code Playgroud)
C#示例(正确输出):
class Program
{
static void Main(string[] args)
{
List<Employee> ls = new List<Employee>();
ls.Add(new Employee { Age = 20, Sex = "M" });
ls.Add(new Employee { Age = 20, Sex = "M" });
ls.Add(new Employee { Age = 20, Sex = "M" });
ls.Add(new Employee { Age = 30, Sex = "F" });
ls.Add(new Employee { Age = 30, Sex = "F" });
foreach (var item in ls.GroupBy(k => new { Age = k.Age, Sex = k.Sex }))
{
Console.WriteLine(String.Format("Group [Age: {0}, Sex: {1}] : {2} Item(s)", item.Key.Age, item.Key.Sex, item.Count()));
}
Console.ReadLine();
}
class Employee
{
public int Age { get; set; }
public string Sex { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
有谁看到我的错误在哪里?
Jon*_*eet 15
Key在VB代码中创建匿名类型时,需要使用修饰符.默认情况下,它会创建读/写属性,而C#匿名类型始终是只读的.只有只读属性中使用Equals/ GetHashCode.
For Each item In ls.GroupBy(Function(k) New With { Key .Age = k.Age, _
Key .Sex = k.Sex})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11565 次 |
| 最近记录: |