Tôi đang cố gắng để làm một cái gì đó như thế này:Làm thế nào để Unbox một đối tượng C# để động loại
void someMethod(TypeA object) { ... }
void someMethod(TypeB object) { ... }
object getObject()
{
if (...) return new TypeA();
else return new TypeB();
}
object obj = getObject();
(obj.GetType()) obj; // won't compile
someMethod(obj);
Rõ ràng là tôi đang bối rối đây. Tôi biết tôi có thể thực hiện công việc này bằng cách viết một tuyên bố có điều kiện -
if (obj.GetType() == typeof(TypeA)) obj = (TypeA)obj;
else if (obj.GetType() == typeof(TypeB)) obj = (TypeB)obj;
- nhưng không có cách nào để thực hiện việc này khi chạy?
EDIT Tôi đồng ý có vẻ như không phải là lựa chọn thiết kế tốt nhất, vì vậy đây là ngữ cảnh. Điểm của mã trên là lớp cơ sở Repository cho Mongo DB. Tôi muốn nó có thể xử lý các loại bàn khác nhau. Vì vậy, someMethod() thực sự là xóa; và TypeA và TypeB là ObjectID và Hướng dẫn; mã ở dưới cùng là một phần của phương thức loại bất khả xâm phạm loại chấp nhận ID làm chuỗi; và getObject() là một phương thức phân tích tham số ID.
Bạn đang conflating một loại 'T' với loại thông tin thời gian chạy liên kết với nó: 'typeof (T) '. Chúng không giống nhau và không thể thay thế cho nhau. –
Có thể có các lựa chọn thiết kế tốt hơn, nhưng bạn đã để lại mục tiêu thực sự của mã trong bài đăng của mình. Có lẽ chúng tôi có thể cung cấp cho bạn một cách tốt hơn và hoàn toàn khác để viết giải pháp cho vấn đề của bạn nếu bạn cho chúng tôi biết những gì bạn đang cố gắng thực hiện với mã này. –
@Kirk Woll, tôi biết sự khác biệt, tôi chỉ muốn minh họa những gì tôi đang cố gắng làm. – McGarnagle