C# 相当于 Java 8 的 "method reference"。

15 浏览
0 Comments

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方法实现)?

0