Trong C #, bạn có thể xác định một bí danh cho một bộ giá trị có tên không?


92

Tôi biết có thể xác định bí danh trong C # bằng từ khóa using .

ví dụ

using ResponseKey = System.ValueTuple<System.Guid, string, string>;

Tuy nhiên, có thể xác định một cái bằng cách sử dụng cú pháp mới cho các bộ giá trị không?

using ResponseKey = (Guid venueId, string contentId, string answer);

Cú pháp này dường như không hoạt động. Có nên không?


1
Tôi không biết câu trả lời, nhưng nó trông giống như "tôi có thể sử dụng var ở cấp mô-đun để xác định một biến không?"
Mario Vernari

không nếu nó không biên dịch phương tiện nó nên làm việc
Selman Genç

4
Tôi không biết câu trả lời, nhưng có vẻ như tốt hơn là tạo một lớp hoặc cấu trúc cho mục đích đó. Tuples là tốt, nhưng xin đừng lạm dụng nó.
Yeldar Kurmangaliyev

4
Nhận xét thú vị @YeldarKurmangaliyev. Lý do để sử dụng điều này là không phải triển khai tất cả các giao diện có thể so sánh được để sử dụng làm khóa đơn giản cho một đối tượng. Vâng, đó là do tôi lười biếng, nhưng nó cũng đang sử dụng tối đa các tính năng ngôn ngữ của chúng.
Nick Randell

3
@NickRandell - hầu hết thời gian bạn viết phần mềm cho mọi người (các nhà phát triển khác) - họ sẽ đọc mã của bạn. Có một lớp và thuộc tính với tên mô tả - là cách tiếp cận thân thiện / hiệu quả hơn. Hầu hết các lần lập trình chi tiêu vào đọc mã vạch (riêng và những người khác) tên mô tả và cấu trúc dữ liệu sẽ tiết kiệm thời gian của họ
Fabio

Câu trả lời:



1

usingđược định nghĩa là: ( MSDN ).using identifier = namespace-or-type-name;

(Guid venueId, string contentId, string answer) không phải là không gian tên cũng không phải là tên loại (đủ điều kiện).

Nhưng tôi chủ yếu là đoán. Thậm chí không biết C # 7.0 tồn tại cho đến bây giờ.


1
Đó là thông số kỹ thuật cho C # 1.1, làm thế nào điều đó chứng minh bất cứ điều gì về C # 7.0?
svick

1
Tôi hiểu nguyên nhân nó sẽ hoạt động như thế nào. Có thể đã làm giống nhau nhưng nó không đúng. Sử dụng không phải là bí danh cho một loại. Nhưng đối với tên kiểu hoặc tên không gian tên. Và các tính năng liên quan đến trình biên dịch là thứ cuối cùng bạn có thể thay đổi, mà không phá vỡ mã hiện có. Vì vậy, họ có thể chắc chắn không thể mở rộng nó. Nhưng tất cả những điều đó được giải thích chi tiết hơn nhiều trong bài đăng của David Arno ở trên. Tôi đã ủng hộ vì nó trả lời nó tốt hơn. Làm cho câu hỏi của bạn thuộc loại không thành vấn đề ...
Christopher

2
@svick Câu hỏi đặt ra là liệu cú pháp cụ thể này "có nên được" cho phép hay không. Điều này trả lời chính xác bởi "không, các nhà phát triển C # không có nghĩa vụ cho phép cú pháp cụ thể này, bởi vì các cú pháp tương tự đã không được phép kể từ phiên bản đầu tiên của C #". Câu hỏi rộng hơn là liệu có nên cho phép bất kỳ biểu thức kiểu nào trong không using.
IllidanS4 hỗ trợ Monica

1
@ IllidanS4 Nếu đó là những gì câu trả lời này nói, thì nó thực sự không rõ ràng. Nó không đề cập rằng thông số kỹ thuật được liên kết là cũ hoặc bất kỳ phần nào của đối số bạn đưa ra.
svick

5
@Christopher Nếu tôi nghĩ một câu trả lời là tệ, tôi sẽ bình luận về nó. Đối với tôi không quan trọng câu trả lời được viết nhanh như thế nào hay nó có những tuyên bố từ chối trách nhiệm nào. Và nếu bạn cho rằng câu trả lời của mình không có giá trị gì, hãy xóa nó đi. Ngoài ra, tôi nghĩ rằng mọi người đến SO để tìm câu trả lời sáng suốt, vì vậy có lẽ bạn nên suy nghĩ một chút trước khi viết một câu trả lời không hiểu biết?
svick
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.