>백엔드 개발 >C++ >C# Func를 표현식으로 변환하려면 어떻게 해야 합니까?

C# Func를 표현식으로 변환하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-03 09:25:39936검색

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

C# Func to Expression>

C#에서 람다 식은 경량 함수를 나타내는 편리한 방법을 제공합니다. 람다를 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 Expression> C#에서는 본질적으로 어렵습니다. 복잡성이 증가하고 제한이 발생할 수 있다는 대가를 치르면서 대체 접근 방식을 모색할 수 있습니다.

위 내용은 C# Func를 표현식으로 변환하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.