Gần đây tôi đã có cơ hội để tinh chỉnh một số mã Java và đã có thể tận dụng lợi thế của một số tính năng Java 8 mới. Trong một trường hợp cụ thể, tôi cần có danh sách các thuộc tính (String) .Name
từ một danh sách các đối tượng. Một ví dụ đơn giản về những gì tôi đã làm là: (? Chưa)C# tương đương với Java 8 "phương pháp tham khảo"
// 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());
Tôi đã tò mò để xem cách những cách tiếp cận sẽ dịch C#, và tôi đã nhận
// 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();
Những gì tôi đã không tìm thấy là một C# tương đương với "sàng lọc 2" để thay thế biểu thức Lambda bằng một cái gì đó (một chút) ngắn gọn hơn. Có tương đương C# với tham chiếu phương thức Java 8 "trong trường hợp này hay không, vì tôi đang cố gắng để có được thuộc tính của từng đối tượng (trong Java được thực hiện bằng phương thức getProperty
)?
Nhưng đường cú pháp giống như tham chiếu phương thức, về cơ bản nó vẫn là '.Select (x => GetName (x)) '. –
Chắc chắn đó là tham chiếu phương pháp. Nhưng nếu đó là đường thì sao? OP chỉ muốn viết mã ngắn hơn. Có gì khác biệt? – Blorgbeard
@Danny Chen: "về cơ bản" tham chiếu phương thức của Java 8 cũng là cú pháp đường cho biểu thức lambda gọi phương thức được chỉ định. Mặc dù, về mặt kỹ thuật, nó là một cách khác, một biểu thức lambda là cú pháp đường cho một phương pháp tham chiếu đến một phương pháp bổ sung giữ cơ thể của lambda. – Holger