C# 相当于 Java 8 的 "method reference"。
C# 相当于 Java 8 的 "method reference"。
最近我有机会调整一些Java代码,并且能够利用一些Java 8的新功能。在一个特定的情况下,我需要从对象列表中获取一个(String) .Name
属性的列表。我所做的一个简化示例是:
// 示例数据:每个对象都有一个名为"Name"的字符串属性 List thingList = new ArrayList<>(Arrays.asList(new Thing("Thing1"), new Thing("Thing2"))); // 第一次尝试 List nameList = new ArrayList<>(); thingList.forEach(x -> nameList.add(x.getName())); // 改进1:使用stream,map和collect List nameList1 = thingList.stream().map(x -> x.getName()).collect(Collectors.toList()); // 改进2:使用"Thing::getName"方法引用 List nameList2 = thingList.stream().map(Thing::getName).collect(Collectors.toList());
我很好奇这些方法如何翻译成C#,我得到了以下结果:
// 示例数据:每个对象都有一个名为"Name"的字符串属性 var thingList = new List { new Thing("Thing1"), new Thing("Thing2") }; // 第一次尝试 var nameList = new List (); thingList.ForEach(x => nameList.Add(x.Name)); // 改进1:使用Select和ToList List nameList1 = thingList.Select(x => x.Name).ToList();
我还没有找到(至少目前还没有)一个C#的等价物来代替“改进2”,以用稍微更简洁的方式替换Lambda表达式。在这种情况下,是否有一个C#的等价物来代替Java 8中的“方法引用”,考虑到我正在尝试获取每个对象的属性(在Java中使用getProperty
方法实现)?