리플렉션을 사용하여 구조의 모든 부분에 대해 MemberExpression을 확인하려고합니다.리플렉션 및 상속 문제 C#
이 Entity entity = new Entity() { FirstPart = new Part() { Id = 1 } };
기능은 다음과 같습니다 :
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; }
}
내가 모든 구성 요소의 MemberExpression을 결정하는 데 사용되는 기능, 다음 개체 구조에 대해 잘 작동 :이 문제를 설명하기 위해 개체의 일부입니다
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;'를 수행 할 수 없습니다. 캐스트가 없으면 Expression이 달라지지 않습니다. – DavidG
답장을 보내 주셔서 감사합니다. 예를 들어 주조 과정을 설명해 주시겠습니까? –