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

如何將 C# 函數轉換為表達式?

Barbara Streisand
Barbara Streisand原創
2025-01-03 09:25:39936瀏覽

How Can I Convert a C# Func to an Expression?

轉換C# Func到Expression>

在C# 中,lambda 表達式提供了一種表示輕量級函數的便捷方法。雖然將 lambda 轉換為 Expression> 很簡單,但使用方法調用,可能存在轉換 Func 的場景。需要直接轉換為表達式。

挑戰

但是,由於編譯時錯誤,這樣的直接轉換是不可能的,如以下程式碼所示:

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);
    }
}

錯誤源自於Func;表示通用委託而不是表達式。

限制

不幸的是,沒有直接的方法來實現所需的轉換。嘗試從 Func 取得原始表達式由於編譯過程中的最佳化和資料遺失,可能被證明是不可行的。

替代方法

作為替代方案,人們可以考慮:

  • 使用反射來檢查Func並推斷其預期表達式。
  • 使用自訂表達式編譯器或動態物件模型基於 Func 建立表達式樹。

但是,這些方法通常涉及複雜的並且容易出錯

結論

轉換Func到表達式>直接在C# 中本質上是具有挑戰性的。可以探索替代方法,但代價是增加複雜性和潛在限制。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn