首頁 > 後端開發 > C++ > 如何將 .NET 函數轉換為表達式?

如何將 .NET 函數轉換為表達式?

Patricia Arquette
發布: 2025-01-05 16:20:40
原創
263 人瀏覽過

How to Convert a .NET Func to an Expression?

轉換.NET Func到.NET 表達式>

在.NET 中,lambda 表達式可以輕鬆轉換為表達式。使用表達式類別。然而,可能存在希望將Func轉換為Func的情況。返回表達式>。

考慮以下程式碼:

public void GimmeExpression(Expression<Func<T>> expression)
{
    ((MemberExpression)expression.Body).Member.Name; // "DoStuff"
}

public void SomewhereElse()
{
    GimmeExpression(() => thing.DoStuff());
}
登入後複製

這裡,將 lambda 表達式傳遞給 GimmeExpression 方法,該方法提取表達式的名稱被呼叫的方法 (DoStuff)。

現在,假設我們想要執行類似的操作,但在受限的環境中context:

public void ContainTheDanger(Func<T> dangerousCall)
{
    try 
    {
        dangerousCall();
    }
    catch (Exception e)
    {
        // This next line does not work...
        Expression<Func<T>> DangerousExpression = dangerousCall;
        var nameOfDanger = 
            ((MemberExpression)dangerousCall.Body).Member.Name;
        throw new DangerContainer(
            "Danger manifested while " + nameOfDanger, e);
    }
}

public void SomewhereElse()
{
    ContainTheDanger(() => thing.CrossTheStreams());
}
登入後複製

在這種情況下,我們嘗試將危險調用函數轉換成進入表達式>,但我們遇到編譯時錯誤:

Cannot implicitly convert type 'System.Func<T>' to 'System.Linq.Expressions.Expression<System.Func<T>>'. An explicit cast does not resolve the situation.
登入後複製

這是因為Func;表示通用委託而不是表達式。雖然編譯器可以神奇地將 lambda 轉換為 Expression對象,這種轉換對於一般的 Func 是不可能的。對象。

如果必要的資料尚未被最佳化掉,則反彙編中間語言(IL)並推斷原始表達式可能允許這種轉換。然而,這是一種複雜且可能不可靠的方法。

以上是如何將 .NET 函數轉換為表達式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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