Tôi muốn xây dựng một phương thức chấp nhận một tham số chuỗi, và một đối tượng mà tôi muốn trả về một thành viên cụ thể dựa trên param. Vì vậy, phương pháp đơn giản nhất là để xây dựng một câu lệnh switch:tuyên bố chuyển đổi được lập chỉ mục hoặc tương đương? .net, C#
public GetMemberByName(MyObject myobj, string name)
{
switch(name){
case "PropOne": return myobj.prop1;
case "PropTwo": return myobj.prop2;
}
}
này hoạt động tốt, nhưng tôi có thể gió lên với một danh sách khá lớn ... Vì vậy, tôi đã tò mò nếu có một cách, mà không cần viết một loạt các lồng nhau các cấu trúc if-else, để thực hiện điều này theo cách được lập chỉ mục, sao cho trường phù hợp được tìm thấy theo chỉ mục thay vì rơi qua một chuyển đổi cho đến khi tìm thấy kết quả phù hợp.
Tôi xem xét sử dụng Dictionary<string, something>
để truy cập nhanh vào các chuỗi phù hợp (là thành viên chủ chốt) nhưng vì tôi muốn truy cập thành viên của đối tượng được truyền vào, tôi không chắc chắn cách thực hiện điều này .
Tôi đang cố gắng tránh phản ánh vv để có triển khai nhanh. Tôi có thể sẽ sử dụng tạo mã, do đó giải pháp không cần phải nhỏ/chặt chẽ, v.v.
Tôi đã xây dựng từ điển nhưng mỗi đối tượng đã khởi tạo nó. Vì vậy, tôi bắt đầu di chuyển điều này đến một phương pháp duy nhất có thể tìm kiếm các giá trị dựa trên các phím-một tuyên bố chuyển đổi. Nhưng kể từ khi tôi không còn lập chỉ mục, tôi sợ các tra cứu liên tục gọi phương pháp này sẽ chậm.
SO: Tôi đang tìm cách kết hợp hiệu suất của tra cứu được lập chỉ mục/băm (như sử dụng từ điển) với các thuộc tính trả về cụ thể của đối tượng được truyền vào. Tôi có thể sẽ đặt điều này trong một phương pháp tĩnh trong mỗi lớp nó được sử dụng cho.
Vì myobj có vẻ rất cụ thể (trái ngược với một 'đối tượng'), không phải là myobj.Property đủ thay vì GetMemberByName (myobj," Property ")? – Humberto
Chỉ là một ý nghĩ, tôi hoàn toàn hiểu lầm ý định của bạn dựa trên tiêu đề. Ví dụ đã xóa nó cho tôi. Có vẻ như câu hỏi là giống như "Làm thế nào tôi có thể truy cập một tài sản của một đối tượng theo tên", phải không? –
Tại sao 'name' là một chuỗi? Đây có phải là thứ được người dùng nhập vào không? Là nó từ một tập tin? Có lý do nào đó không phải là 'enum'? –