gpt4 book ai didi

java - C# 相当于 Java 8 "method reference"

转载 作者:IT老高 更新时间:2023-10-28 20:35:42 24 4
gpt4 key购买 nike

我最近有机会调整一些 Java 代码并能够利用一些新的 Java 8 功能。在一种特殊情况下,我需要从对象列表中获取(字符串).Name 属性列表。我所做的一个简化示例是:

// sample data: <Thing> objects have a single String property called "Name" 
List<Thing> thingList =
new ArrayList<>(Arrays.asList(new Thing("Thing1"), new Thing("Thing2")));

// first pass
List<String> nameList = new ArrayList<>();
thingList.forEach(x -> nameList.add(x.getName()));

// refinement 1: use stream, map, and collect
List<String> nameList1 =
thingList.stream().map(x -> x.getName()).collect(Collectors.toList());

// refinement 2: use "Thing::getName" method reference
List<String> nameList2 =
thingList.stream().map(Thing::getName).collect(Collectors.toList());

我很想知道这些方法将如何转化为 C#,我得到了

// sample data: <Thing> objects have a single String property called "Name"
var thingList = new List<Thing> { new Thing("Thing1"), new Thing("Thing2") };

// first pass
var nameList = new List<String>();
thingList.ForEach(x => nameList.Add(x.Name));

// refinement 1: use Select and ToList
List<String> nameList1 = thingList.Select(x => x.Name).ToList();

我还没有找到(还没有?)相当于“refinement 2”的 C# 表达式,可以用更简洁的东西(稍微)替换 Lambda 表达式。鉴于我正在尝试获取每个对象的 property (在 Java 中使用 getProperty 方法)?

最佳答案

您必须在 Thing 之外声明一个方法(或静态 Thing 方法),然后您可以将方法组引用传递给它:

private string GetName(Thing thing)
{
return thing.Name;
}

...

List<String> nameList1 = thingList.Select(GetName).ToList();

在 C# 6 中,您还可以使用表达式主体函数来节省几行代码:

private string GetName(Thing thing) => thing.Name;

关于java - C# 相当于 Java 8 "method reference",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37175297/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com