나는 그것이 필수적이라고 말하지 않을 것입니다. 그러나 실제로 필요한 경우는 매우 유용합니다.
예를 들어 보자.
최근에 컴파일 타임에 종속 속성의 이름을 모르고 다음에 대한 표현식 트리를 런타임으로 만들 수있는 코드 조각을 만들어야했습니다.
Expression<Func<TMock, TDependency>> expression = (x => x.Dependency);
Moq 프레임 워크를 사용하여 모의 객체를 동적으로 설정하기 위해.
mock.Setup(expression).Returns(dependency);
내가 한 것은 콘크리트 유형을 사용하여 원래 표현식을 컴파일 한 다음 리플렉터를 사용하여 다음 코드를 작성해야한다는 것을 알았습니다.
var argument = Expression.Parameter(typeof(TMock), "x");
var getPropertyExpression = Expression.Property(argument, propertyInfo.Name);
var lambda = Expression.Lambda<Func<TMock, TDependency>>(getPropertyExpression, argument);
Expression<Func<TMock, TDependency>> expression = lambda;
시행 착오를 사용하여 이것을 알아낼 수 있었을 것입니다. 그러나 리플렉터가 쉬워졌습니다.