Например,
var hello = new { Hello = "Hello" };
var world = new { World = "World" };
var helloWorld = hello + world;
Console.WriteLine(helloWorld.ToString());
//outputs {Hello = Hello, World = World}
Там какой-либо путь состоит в том, чтобы сделать эту работу?
var helloWorld = new { Hello = hello.Hello, World = world.World };
Вы можете написать метод, который сделает это автоматически, используя API отражения. Это как можно ближе к этому.
Нет. Объекты hello и world относятся к разным классам.
Единственный способ объединить эти классы - использовать генерацию динамического типа ( Emit ). Вот пример такой конкатенации: http://www.developmentalmadness.com/archive/2008/02/12/extend-anonymous-types-using.aspx
Цитата из упомянутой статьи:
Процесс работает следующим образом: Сначала используйте System.ComponentModel.GetProperties, чтобы получить коллекцию PropertyDescriptorCollection из анонимного типа. Запустите Reflection.Emit, чтобы создать новую динамическую сборку , и используйте TypeBuilder , чтобы создать новый тип, который является составной частью всех свойств {{1 }} вовлеченный. Затем кешируйте новый тип для повторного использования , чтобы вам не приходилось создавать новый тип каждый раз, когда он вам нужен.
Нет - это разные типы, и оператор +
для обоих типов не определен.
В качестве побочного замечания: я не думаю, что вы имеете в виду concatenate
. В C# concatenate - это что-то, что вы делаете с двумя или более IEnumeration
, что помещает их "конец в конец". Например, метод Linq Concat()
или String.Concat()
(строки - это "коллекции" char). То, что вы описали в своем вопросе, больше похоже на объединение или множественное наследование между двумя несвязанными типами. Я не могу придумать ничего подобного в C#, кроме использования автономных типов, как в альтернативе ниже:
var hello = new { Hello = "Hello" };
var world = new { World = "World" };
var helloWorld = new { hello, world };
Console.WriteLine(helloWorld.ToString());
//outputs { hello = { Hello = Hello }, world = { World = World } }