Tôi có hai đối tượng và tôi muốn kết hợp chúng:Cách tốt nhất để hợp nhất hai đối tượng trong thời gian chạy bằng C# là gì?
public class Foo
{
public string Name { get; set; }
}
public class Bar
{
public Guid Id { get; set; }
public string Property1 { get; set; }
public string Property2 { get; set; }
public string Property3 { get; set; }
public string Property4 { get; set; }
}
Để tạo:
public class FooBar
{
public string Name { get; set; }
public Guid Id { get; set; }
public string Property1 { get; set; }
public string Property2 { get; set; }
public string Property3 { get; set; }
public string Property4 { get; set; }
}
tôi sẽ chỉ biết cấu trúc của Foo khi chạy. Bar có thể là bất kỳ kiểu nào khi chạy. Tôi muốn có một phương pháp sẽ được đưa ra một loại và nó kết hợp kiểu đó với Foo. Ví dụ, kịch bản trên, phương thức này được đưa ra một kiểu Bar khi chạy và tôi kết hợp nó với Foo.
Cách tốt nhất để làm điều này là gì? Nó có thể được thực hiện bằng cách sử dụng LINQ Expressions hoặc tôi có để tạo ra nó tự động hoặc là có một cách khác? Tôi vẫn đang học không gian tên LINQ mới trong C# 3.0, vì vậy xin lỗi vì sự thiếu hiểu biết nếu nó không thể được thực hiện bằng cách sử dụng LINQ Expressions. Đây cũng là lần đầu tiên tôi phải làm một cái gì đó năng động như thế này với C#, vì vậy tôi không hoàn toàn chắc chắn về tất cả các tùy chọn tôi có sẵn cho tôi.
Cảm ơn bạn đã chọn bất kỳ tùy chọn nào.
EDIT
Đây là nghiêm chỉnh để thêm thông tin meta vào loại nhất định với tôi cho serialization. Kịch bản này giữ cho các đối tượng của người dùng không biết về thông tin meta cần được thêm vào, trước khi nó được tuần tự hóa. Tôi đã đưa ra hai lựa chọn trước khi đặt câu hỏi này và tôi chỉ muốn xem liệu có còn nữa không, trước khi quyết định sử dụng cái nào.
Hai tùy chọn Tôi đã đưa ra là:
Thao tác chuỗi tuần tự của các loại trao cho tôi sau khi serializing nó, bằng cách thêm các thông tin meta.
Bao gói loại cho tôi, giống như những gì @Zxpro đề cập, nhưng tôi hơi khác một chút, điều đó là tốt. Nó sẽ chỉ làm cho người dùng API của tôi phải làm theo quy ước, mà không phải là một điều xấu, bởi vì tất cả mọi người là về ước về cấu hình:
public class Foo<T>
{
public string Name { get; set; }
public T Content { get; set; }
}
EDIT
Cảm ơn tất cả mọi người cho câu trả lời của họ. Tôi quyết định đóng gói các đối tượng như trên và tôi đã đưa ra câu trả lời cho @Zxpro, vì đa số đều thích cách tiếp cận đó.
Nếu có ai khác gặp phải câu hỏi này, vui lòng đăng bài, nếu bạn nghĩ rằng có thể có cách tốt hơn.
Đây sẽ là một giải pháp lý tưởng, nhưng nó sẽ đòi hỏi kiến thức biên dịch về Bar, mà người hỏi ban đầu đã tuyên bố chỉ có sẵn khi chạy. – Randolpho
@Randalpho: Có thể, có thể không. Nó có thể không được biết * trong bối cảnh đó *, nhưng nó cũng có thể có thể, tùy thuộc vào kiến trúc, để sử dụng chung chung. –
Tôi đã nghĩ về điều đó và đó là kế hoạch rơi trở lại của tôi, nếu điều này không thể được thực hiện dễ dàng và performant. Mỏ của tôi hơi khác một chút. Về cơ bản, hãy công khai Foo {public string Name {get; bộ; } nội dung công khai T {get; bộ; }} –