Знаете ли вы во время компиляции имена свойств?Потому что вы можете сделать это:
public static T CastByExample<T>(object o, T example) {
return (T)o;
}
public static object MyMethod(object obj) {
var example = new { FirstProperty = "abcd", SecondProperty = 100 };
var casted = CastByExample(obj, example);
return new {
FirstProperty = casted.FirstProperty,
SecondProperty = casted.SecondProperty,
AddedProperty = true
};
}
Тогда:
var extendedObject = MyMethod(
new {
FirstProperty = "abcd",
SecondProperty = 100
}
);
var casted = CastByExample(
extendedObject,
new {
FirstProperty = "abcd",
SecondProperty = 100,
AddedProperty = true
}
);
Console.WriteLine(xyz.AddedProperty);
Обратите внимание, что это очень сильно зависит от того факта, что два анонимных типа в одной сборке со свойствами, имеющими одинаковое имяодин и тот же тип в том же порядке относится к одному и тому же типу.
Но, если вы собираетесь это сделать, почему бы просто не создавать конкретные типы?
Вывод:
True