У меня есть два объекта, и я хочу, чтобы объединить их:Каков наилучший способ объединить два объекта во время выполнения с помощью C#?
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; }
}
Для создания:
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; }
}
Я только знать структуру Foo во время выполнения. Бар может быть любым типом во время выполнения. Я хотел бы иметь метод, которому будет задан тип, и он объединяет этот тип с Foo. Например, описанный выше сценарий, метод получил тип Bar во время выполнения, и я объединил его с Foo.
Что было бы лучшим способом сделать это? Можно ли это сделать с помощью LINQ Expressions или мне нужно генерировать его динамически или есть другой способ? Я все еще изучаю новое пространство имен LINQ в C# 3.0, поэтому извините невежество, если это невозможно сделать с помощью LINQ Expressions. Это также первый случай, когда мне когда-либо приходилось делать что-то такое с C#, поэтому я не совсем уверен в всех доступных мне вариантах.
Спасибо за любые предоставленные варианты.
EDIT
Это строго для добавления мета-информации типа вверенному мне для сериализации. Этот сценарий не позволяет объектам пользователя не знать метаинформацию, которая должна быть добавлена до ее сериализации. Я задал два варианта, прежде чем задавать этот вопрос, и я просто хотел узнать, есть ли еще, прежде чем принимать решение о том, какой из них использовать.
Два варианта я придумываю является:
Манипулирования сериализованной строки типа вверенному мне после сериализации, путем добавления меты-информации.
Обертывание имеющегося у меня типа, похожего на то, что упомянуто @Zxpro, но мое немного отличалось, что хорошо. Это будет просто сделать пользователь моего API должен следовать соглашению, что не плохо, поскольку все о конвенции по конфигурации:
public class Foo<T>
{
public string Name { get; set; }
public T Content { get; set; }
}
EDIT
Спасибо всем за их ответы. Я решил обернуть объект, как указано выше, и я дал ответ на @Zxpro, так как большинству понравился этот подход.
Если кто-либо другой сталкивается с этим вопросом, не стесняйтесь публиковать сообщения, если вы считаете, что может быть лучший способ.
Это было бы идеальным решением, но для этого потребовалось бы знание времени компиляции Bar, о котором заявлял первоначальный консультант, доступно только во время выполнения. – Randolpho
@ Randalpho: Может быть, может и нет. Это не может быть известно * в этом контексте *, но вполне возможно, в зависимости от архитектуры, использовать общий. –
Я думал об этом, и это мой план возврата, если это невозможно сделать легко и результативно. Однако шахта несколько отличалась. В основном создание public Foo {public string Имя {get; задавать; } public T Content {get; задавать; }} –