> 백엔드 개발 > C++ > 'obj => obj.Prop'를 'parent => parent.obj.Prop'로 변환하는 표현식을 작성하는 방법은 무엇입니까?

'obj => obj.Prop'를 'parent => parent.obj.Prop'로 변환하는 표현식을 작성하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2025-01-18 07:02:17
원래의
405명이 탐색했습니다.

如何组合表达式将 "obj => obj.Prop" 转换为 "parent => parent.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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿