Tôi đã thử một vài cách khác nhau, nhưng tôi đã đạt được kết luận rằng nó không thể thực hiện được. Đó là một tính năng ngôn ngữ mà tôi đã rất thích từ các ngôn ngữ khác trong quá khứ. Nó chỉ là một cái gì đó tôi nên chỉ cần viết tắt?Các trình lập chỉ mục tĩnh không được hỗ trợ trong C#?
Trả lời
Không, trình lập chỉ mục tĩnh không được hỗ trợ trong C#. Không giống như các câu trả lời khác, tuy nhiên, tôi thấy làm thế nào có thể dễ dàng được điểm trong việc có chúng. Hãy xem xét:
Encoding x = Encoding[28591]; // Equivalent to Encoding.GetEncoding(28591)
Encoding y = Encoding["Foo"]; // Equivalent to Encoding.GetEncoding("Foo")
Nó sẽ tương đối hiếm khi được sử dụng, tôi nghi ngờ, nhưng tôi cho rằng nó là không hợp lý vì không có lý do cụ thể nào.
Bạn có thể mô phỏng indexers tĩnh sử dụng tài sản được lập chỉ mục tĩnh:
public class MyEncoding
{
public sealed class EncodingIndexer
{
public Encoding this[string name]
{
get { return Encoding.GetEncoding(name); }
}
public Encoding this[int codepage]
{
get { return Encoding.GetEncoding(codepage); }
}
}
private static EncodingIndexer StaticIndexer;
public static EncodingIndexer Items
{
get { return StaticIndexer ?? (StaticIndexer = new EncodingIndexer()); }
}
}
Cách sử dụng:
Encoding x = MyEncoding.Items[28591]; // Equivalent to Encoding.GetEncoding(28591)
Encoding y = MyEncoding.Items["Foo"]; // Equivalent to Encoding.GetEncoding("Foo")
Mặc dù câu trả lời của Jon (như thường lệ) là chính xác nhất nhưng đây không phải là một lựa chọn không tốt cho một số tình huống. – Thiru
Không, nhưng nó có thể để tạo ra một trường tĩnh chứa một thể hiện của một lớp có sử dụng một người lập chỉ mục ...
namespace MyExample {
public class Memory {
public static readonly MemoryRegister Register = new MemoryRegister();
public class MemoryRegister {
private int[] _values = new int[100];
public int this[int index] {
get { return _values[index]; }
set { _values[index] = value; }
}
}
}
}
... Có thể truy cập theo cách bạn đang dự định g. Điều này có thể được kiểm tra trong Cửa sổ ngay lập tức ...
Memory.Register[0] = 12 * 12;
?Memory.Register[0]
144
- 1. Đối tượng 'bộ' Python không hỗ trợ lập chỉ mục
- 2. LoạiError: đối tượng 'dict_keys' không hỗ trợ lập chỉ mục
- 3. Scipy: Các ma trận thưa thớt có hỗ trợ lập chỉ mục nâng cao không?
- 4. Dữ liệu chính được hỗ trợ UITableView với chỉ mục
- 5. SQL Compact Edition có hỗ trợ các chỉ mục được nhóm không?
- 6. Dart có hỗ trợ lập trình chức năng không?
- 7. Có ngôn ngữ lập trình nào hỗ trợ xml không?
- 8. Các khối Objective-C có được hỗ trợ bởi các trình biên dịch trên Linux không?
- 9. Lỗi Loại: 'int' đối tượng không hỗ trợ lập chỉ mục
- 10. Trình duyệt nào chỉ hỗ trợ SSLv2?
- 11. java.net.SocketException: Địa chỉ gia đình không được hỗ trợ bởi giao thức trong trình giả lập android
- 12. Hiển thị các trang có thể lập chỉ mục tĩnh với AngularJS cho mục đích SEO?
- 13. Độ mạnh mã hóa được hỗ trợ có được chỉ định trong chứng chỉ SSL không?
- 14. Lỗi: Phương pháp được chỉ định không được hỗ trợ?
- 15. Lập trình kiểm tra hỗ trợ iMessage của liên hệ
- 16. không được hỗ trợ cấu hình đồng bằng phong cách không được hỗ trợ trong một mục navigation
- 17. Hỗ trợ xác nhận jQuery/lập trình phòng thủ?
- 18. Có hỗ trợ C# cho một loại dựa trên chỉ mục không?
- 19. Tại sao đa thừa kế không được hỗ trợ trong hầu hết ngôn ngữ lập trình?
- 20. Xattrs không được hỗ trợ
- 21. Hoạt động không được hỗ trợ trên bộ sưu tập chỉ đọc C# wp7
- 22. Bao nhiêu C++ được hỗ trợ trong Objective-C++
- 23. Cách buộc gcc liên kết các đối tượng C++ tĩnh, không được hỗ trợ từ thư viện
- 24. Deserializing JSON với mảng được lập chỉ mục trong C#
- 25. Python: ValueError: ký tự định dạng không được hỗ trợ '' '(0x27) tại chỉ mục 1
- 26. Does/Will Rust có hỗ trợ các thành ngữ lập trình chức năng không?
- 27. lập chỉ mục bit trong C?
- 28. không được hỗ trợ NSSortDescriptor (khối so sánh không được hỗ trợ)
- 29. Bật C++ 11 trong trình lập chỉ mục CDT (Juno/Kepler/Luna) của Eclipse
Chính xác. Họ có chỗ đứng của họ. Những người khác ở đây nói về vấn đề thiết kế rõ ràng chưa bao giờ làm việc với một ngôn ngữ cổ điển được cho phép, vì chúng rất hữu ích. – user9991
Đúng. Quan điểm của tôi chính xác. Họ có một vị trí rất hữu ích trong kiến trúc. Một số người bị mù, tôi đoán vậy! – Kilhoffer
Crap. Bây giờ tôi phải viết một phương thức tĩnh Cache.Get (key) thay vì Cache [key] ... – Gishu