obj.Prop"를 "parent => parent.obj.Prop"으로 변환하기 위한 표현식 작성 기존 표현식 "obj => obj.Prop"은 다음과 같습니다."/> obj.Prop"를 "parent => parent.obj.Prop"으로 변환하기 위한 표현식 작성 기존 표현식 "obj => obj.Prop"은 다음과 같습니다.">
식을 결합하여 "obj => obj.Prop"을 "parent => parent.obj.Prop"으로 변환합니다.
기존 표현식 "obj => obj.Prop"는 원래 표현식과 "parent" parent.obj.Prop"에서 "obj"를 추출하는 표현식을 결합하여 새로운 표현식 "parent =>로 변환할 수 있습니다. .
맞춤 표현식 조합 기능
조합을 만들려면 사용자 정의 표현식을 사용하여 함수를 결합할 수 있습니다.
<code class="language-csharp">public static Expression<Func<T, TResult>> Compose<T, TIntermediate, TResult>( this Expression<Func<T, TIntermediate>> first, Expression<Func<TIntermediate, TResult>> second) { return Expression.Lambda<Func<T, TResult>>( second.Body.Replace(second.Parameters[0], first.Body), first.Parameters[0]); }</code>
이 함수는 두 번째 표현식의 매개변수에 대한 참조를 첫 번째 표현식의 본문으로 대체하여 두 표현식을 결합합니다.
표현대체
식을 바꾸려면 사용자 정의 식 접근자를 사용할 수 있습니다.
<code class="language-csharp">public class ReplaceVisitor : ExpressionVisitor { private readonly Expression from, to; public ReplaceVisitor(Expression from, Expression to) { this.from = from; this.to = to; } public override Expression Visit(Expression ex) { if (ex == from) return to; else return base.Visit(ex); } } public static Expression Replace(this Expression ex, Expression from, Expression to) { return new ReplaceVisitor(from, to).Visit(ex); }</code>
이 접근자는 한 표현식의 모든 항목을 다른 표현식으로 바꿉니다.
결합표현
위의 기능을 사용하면 원래 표현식과 "obj" 추출된 표현식을 결합할 수 있습니다.
<code class="language-csharp">Expression<Func<Customer, object>> propertySelector = cust => cust.Name; Expression<Func<CustomerModel, Customer>> modelSelector = model => model.Customer; Expression<Func<CustomerModel, object>> magic = modelSelector.Compose(propertySelector);</code>
생성된 표현식 "magic"은 이제 "CustomerModel"의 "Customer"에서 "Name" 속성을 선택합니다.
이 수정된 응답은 원래 내용의 구조와 언어를 유지하면서 문장을 바꾸고 동의어를 사용하여 의역을 수행합니다.
위 내용은 'obj => obj.Prop'를 'parent => parent.obj.Prop'로 변환하는 표현식을 작성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!