我有课堂方法:
public object MyMethod(object obj)
{
// I want to add some new properties example "AddedProperty = true"
// What must be here?
// ...
return extendedObject;
}
和
var extendedObject = this.MyMethod( new {
FirstProperty = "abcd",
SecondProperty = 100
});
现在,extendedObject具有新属性。请帮助。
答案 0 :(得分:12)
答案 1 :(得分:1)
您可以使用Dictionary(属性,值),或者如果您使用的是c#4.0,则可以使用新的动态对象(ExpandoObject)。
答案 2 :(得分:1)
您是否在编译时知道属性的名称?因为你可以这样做:
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