リフレクションを使用して構造体のすべての部分のMemberExpressionを決定しようとしています。私はすべてのコンポーネントのMemberExpressionを決定するために使用さリフレクションと継承の問題C#
public class Entity
{
public Part FirstPart { get; set; }
}
public class Part
{
public int Id { get; set; }
}
public class SubPart : Part
{
public int ExtraProperty { get; set; }
}
機能、次のオブジェクト構造のために正常に動作します:これらの問題を説明するために、オブジェクトの一部です
Entity entity = new Entity() { FirstPart = new Part() { Id = 1 } };
機能は次のとおりです。
var param = Expression.Parameter(entity.GetType());
String[] childProperties = ("FirstPart.Id").Split('.');
var propExpression = Expression.PropertyOrField(param, childProperties[0]);
for (int i = 1; i < childProperties.Length; i++)
{
propExpression = Expression.PropertyOrField(propExpression, childProperties[i]);
}
しかし、これが原因継承するには、次のようには機能しません:
Entity entity = new Entity() { FirstPart = new SubPart() { ExtraProperty = 1 } };
私たちは「FirstPart.ExtraProperty」へのパスを変更する必要があるプロパティをたどるために:「ExtraPropertyは」パートのメンバーではありません。
var param = Expression.Parameter(entity.GetType());
String[] childProperties = ("FirstPart.ExtraProperty").Split('.');
var propExpression = Expression.PropertyOrField(param, childProperties[0]);
for (int i = 1; i < childProperties.Length; i++)
{
propExpression = Expression.PropertyOrField(propExpression, childProperties[i]);
}
エラーメッセージがあると述べています。誰もがこの問題を克服する方法を知っていますか?
キャストする必要があります。 – SLaks
これについて考えると、 'entity.FirstPart.ExtraProperty = 5;'を実行することができませんでした。なぜなら、式は異なるものではありません。 – DavidG
返信いただきありがとうございます。鋳造プロセスの例を説明できますか? –