Существует ли путь к concat C# анонимные типы?

Например,

var hello = new { Hello = "Hello" };
var world = new { World = "World" };
var helloWorld = hello + world;
Console.WriteLine(helloWorld.ToString());
//outputs {Hello = Hello, World = World}

Там какой-либо путь состоит в том, чтобы сделать эту работу?

13
задан Michael Pakhantsov 12 December 2013 в 08:06
поделиться

3 ответа

var helloWorld = new { Hello = hello.Hello, World = world.World };

Вы можете написать метод, который сделает это автоматически, используя API отражения. Это как можно ближе к этому.

1
ответ дан 2 December 2019 в 01:20
поделиться

Нет. Объекты hello и world относятся к разным классам.

Единственный способ объединить эти классы - использовать генерацию динамического типа ( Emit ). Вот пример такой конкатенации: http://www.developmentalmadness.com/archive/2008/02/12/extend-anonymous-types-using.aspx

Цитата из упомянутой статьи:

Процесс работает следующим образом: Сначала используйте System.ComponentModel.GetProperties, чтобы получить коллекцию PropertyDescriptorCollection из анонимного типа. Запустите Reflection.Emit, чтобы создать новую динамическую сборку , и используйте TypeBuilder , чтобы создать новый тип, который является составной частью всех свойств {{1 }} вовлеченный. Затем кешируйте новый тип для повторного использования , чтобы вам не приходилось создавать новый тип каждый раз, когда он вам нужен.

8
ответ дан 2 December 2019 в 01:20
поделиться

Нет - это разные типы, и оператор + для обоих типов не определен.

В качестве побочного замечания: я не думаю, что вы имеете в виду 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 } }
1
ответ дан 2 December 2019 в 01:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: