Мне нужно «слить» 2 динамических объекта в C #. Все, что я нашел на stackexchange, касалось только нерекурсивного слияния. Но я ищу что-то рекурсивное или глубокое слияние, очень похожее на функцию jQuery $. Extend (obj1, obj2)
.
При столкновении двух членов должны применяться следующие правила:
IEnumerable
и IEnumberables
просто объединяются (возможно, .Concat ()
?) IDictionary
& IDictionary
объединены; ключи obj1 имеют приоритет при столкновении Expando
& Типы Expando []
должны быть объединены рекурсивно, тогда как Expando [] всегда будет иметь только элементы одного типа Вот пример возможного слияния:
dynamic DefaultConfig = new {
BlacklistedDomains = new string[] { "domain1.com" },
ExternalConfigFile = "blacklist.txt",
UseSockets = new[] {
new { IP = "127.0.0.1", Port = "80"},
new { IP = "127.0.0.2", Port = "8080" }
}
};
dynamic UserSpecifiedConfig = new {
BlacklistedDomain = new string[] { "example1.com" },
ExternalConfigFile = "C:\\my_blacklist.txt"
};
var result = Merge (UserSpecifiedConfig, DefaultConfig);
// result should now be equal to:
var result_equal = new {
BlacklistedDomains = new string[] { "domain1.com", "example1.com" },
ExternalConfigFile = "C:\\my_blacklist.txt",
UseSockets = new[] {
new { IP = "127.0.0.1", Port = "80"},
new { IP = "127.0.0.2", Port = "8080" }
}
};
Есть идеи, как это сделать?