私は困惑した次のコードスニペットを見つけました。c# - 継承+リフレクション - オブジェクトをクローン化しない方法
public class Bclass : Aclass
{
public const BindingFlags Flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
public Bclass(IAclass a) : base(string.Empty)
{
var destFields = this.GetType().BaseType.GetFields(Flags);
a.GetType().GetFields(Flags).Where(x => destFields.Contains(x)).ToList().ForEach(property =>
{
destFields.First(x => x == property).SetValue(this, property.GetValue(a));
});
var destProperties = this.GetType().BaseType.GetProperties(Flags);
a.GetType().GetProperties(Flags).Where(x => destProperties.Contains(x)).ToList().ForEach(property =>
{
destProperties.First(x => x == property).SetValue(this, property.GetValue(a, null));
});
}
// some more methods...
}
私の主なQは、なぜ誰もがそれを行うの思うだろう....です... 何の利益(単数または複数)は、このコードから出てくることができます。それは何
本当に本当に*悪いことに、aから新しいインスタンス。それはひどく見え、非常に非効率的です –
Protip:AutoMapperを使用してください。 – leppie
誰が何をやろうと考えているのですか?フィールドはコピーされますか?一般的にこのひどいコードですか?私の意見では、反映は通常、コンストラクタの悪い呼び出しです。あなたは利益について質問しますが、何に対してですか?あなたがこれから何をしたいのかを明確にしてください。 –