2016-10-13 15 views
19

Tại sao new List<string>().ToString(); trả lại các mục sau :?Tại sao ToString() trên các loại chung có dấu ngoặc vuông?

System.Collections.Generic.List`1[System.String] 

Tại sao nó không chỉ mang lại System.Collections.Generic.List<System.String>. Có gì với cú pháp C# không lạ?

+3

Chỉ trong trường hợp yo muốn để có được tên với <> ngoặc http://stackoverflow.com/a/14284719/797249 – Artiom

+0

Để người bình chọn để đóng này bởi vì nó là ý kiến ​​dựa. Nó dựa trên ý kiến ​​như thế nào? Câu trả lời được cung cấp là hoàn toàn khách quan. –

Trả lời

18

Vì khung <> là cú pháp C#. Việc triển khai System.Object.ToString() trả về tên loại với cú pháp CLR.

Hãy xem xét điều này:

System.Collections.Generic.List<System.String> 

Trông đẹp khi bạn đang phát triển trong C#, nhưng nói rằng bạn gọi ToString từ C++/CLI. Bạn có hy vọng những điều sau sẽ thay thế?

System::Collections::Generic::List<System::String> 

Rõ ràng, hành vi không được thay đổi dựa trên ngôn ngữ mà người gọi được biên dịch, vì vậy chuỗi trả về là trung lập về ngôn ngữ.


This MSDN page liệt kê các quy ước tên loại được CLR sử dụng. (Cảm ơn Matthew Watson cho liên kết).

Đối với arity (phần `1), bạn có thể tìm thêm thông tin trong ECMA-335 (đặc điểm kỹ thuật CLI):

Loại I.10.7.2 tên và mã hóa arity

CLS các tên kiểu chung chung được mã hóa theo định dạng name[`arity], trong đó [...] cho biết ký tự dấu lăng mộ `arity là tùy chọn. Tên mã hóa phải tuân thủ các quy tắc:

  1. tên sẽ là một ID (xem phân vùng II) mà không chứa ký tự `.
  2. arity được chỉ định dưới dạng số thập phân chưa dấu mà không có số 0 hoặc dấu cách đầu.
  3. Đối với loại chung thông thường, arity là số tham số loại được khai báo trên loại.
  4. Đối với loại chung chung lồng nhau, arity là số tham số loại mới được giới thiệu.
+6

Cũng thấy [ở đây] (https://msdn.microsoft.com/en-us/library/system.type.assemblyqualifiedname (v = vs.110) .aspx), trong đó có một bảng với tất cả các ký hiệu khác nhau được sử dụng cho Tên loại CLR. –

+1

@MatthewWatson cảm ơn vì liên kết, tôi đã thực sự cố gắng tìm thấy trong tài liệu, tôi sẽ thêm nó vào câu trả lời nếu bạn không nhớ –

+0

Chúc tôi có thể upvote một lần nữa để thêm đặc tả CLI ..:) –

Các vấn đề liên quan