Câu trả lời hiện tại của @poke là chính xác và ghi chú sự khác biệt giữa các bộ dữ liệu và các loại ẩn danh. Tôi sẽ thảo luận về lý do tại sao bạn vẫn sẽ sử dụng chúng hoặc thích cái khác.
Có hai tính năng C# 7 mới loại bỏ các loại ẩn danh. ValueTuples và Records.
Lý do chính mà bạn sẽ không sử dụng các loại vô danh là
- bạn không thể sử dụng các loại vô danh trên toàn cầu và họ chỉ gõ an toàn khi sử dụng tại địa phương.không phải là địa phương, bạn phải coi nó là đối tượng
dynamic
có chi phí hiệu suất đáng kể
Lý do bạn thích tuple hơn các loại ẩn danh.
chúng được nhập an toàn khắp nơi. (bất kể đặt tên)
chúng có thể được sử dụng làm đối số phương pháp, nhập đối số, trường và khá nhiều ở mọi nơi. (vâng tôi đã nói khá nhiều, có những nơi cần phải chấp nhận với bộ dữ liệu, vấn đề thời gian của nó.)
vì chúng có thể được sử dụng làm đối số kiểu, bạn có thể muốn bọc các thông số nhẹ trong tham số đơn. như Stack<(min, mid, max)>
bạn có thể thay đổi mục đặt tên khi đã bao giờ bạn cảm thấy thích hợp của nó, tên bối cảnh chung item
có thể đáp ứng và trong bối cảnh cụ thể hơn bạn cần tên cụ thể hơn nữa, như car
họ đang ngầm mui trần, int, int
có thể được gán cho (int, long)
mà không có dàn diễn viên rõ ràng.
chúng được sử dụng trong Deconstruct s. mang lại rất nhiều cú pháp cho ngôn ngữ.
bạn có thể có nhiều bài tập và tờ khai như (int x, int y) = (0, 1)
Có tất cả các tính năng này, vẫn còn là một trong những lý do mà bạn có thể thích loại vô danh trên tuple.
- Loại ẩn danh là loại tham chiếu nhưng tuples là loại giá trị.
nhưng nếu bạn muốn sử dụng loại ẩn danh trên toàn cầu thì sao? Bạn thích có các đối tượng động hay các đối tượng được gõ tĩnh?
Tính năng Bản ghi đến lại đánh bại các loại ẩn danh. với các bản ghi bạn xác định lớp của bạn theo cách ngắn gọn, ngắn gọn và thuận tiện. không phải là một thỏa thuận lớn. chỉ một dòng
public class Point(X, Y);
Nhập toàn bộ địa điểm và bạn cũng có loại tham chiếu trong tay. hai tính năng mới này mang lại mọi thứ để đánh bại các loại vô danh.
Lưu ý rằng Bản ghi chưa được thêm vào, chúng tôi chỉ phải đợi.
Chỉ còn lại sử dụng thực sự của các loại vô danh sẽ
Như tôi đã nói ValueTuples không tương thích với mọi thành phần. nó chỉ là vấn đề thời gian, nhưng đây là cách nó sẽ như thế nào trong tương lai.
đủ đối số. trong sử dụng ý kiến khiêm tốn của tôi về các loại vô danh trở nên hiếm hoi, các lập trình viên cũ vẫn có thể sử dụng kiểu ẩn danh trong LINQ theo thói quen.
Nguồn
2017-10-24 06:23:56
Có thể đọc được? 'new {x, i}' làm cho nó hoàn toàn rõ ràng rằng nó là một đối tượng mới đang được trả về, trong khi tôi phải so sánh hai ví dụ để tìm ra cái đầu tiên làm. Nhưng sau đó nó có thể chỉ là tôi. – stybl
Đối với một điều, chúng được hỗ trợ trong cây biểu thức và chữ tuple không phải là ... –
Lưu ý rằng ví dụ của bạn sẽ không biên dịch trong C# 7.0 vì '(x, i)' có các phần tử tuple chưa đặt tên, nhưng chúng được đặt tên ngầm trong C# 7.1. –