반응형
일부 개체 속성이 UnaryExpression이고 다른 속성이 MemberExpression 인 이유는 무엇입니까?
문자열 속성 이름 질문이 아닌 람다를 사용하여 모델 속성 선택 질문에 대한 대답에 따라 다음과 같이 컬렉션에 속성을 추가하려고합니다.
var props = new ExportPropertyInfoCollection<JobCard>();
props.Include(model => model.BusinessInstallNumber).Title("Install No").Width(64).KeepZeroPadding(true);
props.Include(model => model.DeviceName).Title("Device").Width(70);
props.Include(model => model.DateRequested).Title("Request Date").Format("{0:dd/MM/yyyy}").Width(83);
Include
메서드에 다음 코드를 작성했습니다 .
public class PropertyCollection<T>
{
public void Include(Expression<Func<T, object>> expression)
{
var memberExpression = expression.Body as MemberExpression;
if (memberExpression != null)
{
var pes = new ExportPropertyInfoBuilder {Property = new ExportPropertyInfo {Property = memberExpression.Member as PropertyInfo}};
Properties.Add(pes.Property.Property.Name, pes.Property);
return pes;
}
그러나 코드를 실행할 때 일부 람다는 예상대로 MemberExpression 값을 산출했지만 다른 일부는 UnaryExpression 값을 산출했습니다 . 람다를 사용하여 모든 속성을 추가하기 전에 코드의 첫 줄을 다음과 같이 변경해야했습니다.
var memberExpression = expression.Body as MemberExpression ?? ((UnaryExpression) expression.Body).Operand as MemberExpression;
모든 속성은 POCO 비즈니스 객체에서 '단순'유형, 즉 문자열, DateTime, int, bool 등입니다. 몇 가지 다양한 DataAnnotations 속성 으로 장식되어 있습니다 .
내 예제의 일부 람다가 MemberExpression 값과 다른 UnaryExpression 값 을 생성하는 원인은 무엇입니까 ? 내 예에서 첫 번째 UnaryExpression 은 세 번째 줄인 DateTime 속성에 있지만 부울 속성은 UnaryExpressions 도 생성 합니다.
문제가 뭔지 안다고 생각합니다. 표현식은 type을 반환합니다 object
.
이것을 Expression<Func<T, R>>
반환 유형으로 변경하면 올바르게 추론되어야하며 UnaryExpression
(일부 권투 작업이라고 가정합니다) 발생하지 않아야합니다.
최신 정보:
의 서명은 다음과 Include
같아야합니다.
public void Include<T, R>(Expression<Func<T, R>> expression)
반응형
'Program Tip' 카테고리의 다른 글
ConfigurationBuilder를 사용하여 기본 경로 설정 (0) | 2020.11.03 |
---|---|
내 Xcode 프로젝트에 파란색 폴더가있는 이유는 무엇입니까? (0) | 2020.11.02 |
C ++ 11 std :: set 람다 비교 함수 (0) | 2020.11.02 |
scala.concurrent.blocking 사용 사례 (0) | 2020.11.02 |
Scala의 Cats 라이브러리는 scalaz와 어떤 관련이 있습니까? (0) | 2020.11.02 |