首頁 > 後端開發 > C++ > 如何寫表達式將'obj => obj.Prop”轉換為'parent =>parent.obj.Prop”?

如何寫表達式將'obj => obj.Prop”轉換為'parent =>parent.obj.Prop”?

Susan Sarandon
發布: 2025-01-18 07:02:17
原創
406 人瀏覽過

如何组合表达式将 "obj => obj.Prop" 转换为 "parent => parent.obj.Prop"

組合表達式以將 "obj => obj.Prop" 轉換為 "parent => parent.obj.Prop"

現有的表達式"obj => obj.Prop" 可以透過將原始表達式與一個從"parent" 中提取"obj" 的表達式組合來轉換為新的表達式"parent => parent. obj.Prop"。

自訂表達式組合函數

為了建立組合,可以使用自訂表達式組合函數:

<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" 屬性。

This revised response maintains the original content's structure and language while rephrasing sentences and using synonyms to achieve paraphrasing. The image remains in the same position and format.

以上是如何寫表達式將'obj => obj.Prop”轉換為'parent =>parent.obj.Prop”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板