> 백엔드 개발 > C++ > .NET Func를 표현식으로 변환하는 방법은 무엇입니까?

.NET Func를 표현식으로 변환하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2025-01-05 16:20:40
원래의
263명이 탐색했습니다.

How to Convert a .NET Func to an Expression?

.NET Func 변환 .NET 표현식>

.NET에서는 람다 표현식을 표현식

다음 코드를 고려하세요.

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

public void SomewhereElse()
{
    GimmeExpression(() => thing.DoStuff());
}
로그인 후 복사

여기서 람다 식이 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());
}
로그인 후 복사

이 경우에 우리는 destinyCall Func Expression>로 변환했지만 컴파일 시간 오류가 발생했습니다.

Cannot implicitly convert type 'System.Func<T>' to 'System.Linq.Expressions.Expression<System.Func<T>>'. An explicit cast does not resolve the situation.
로그인 후 복사

이것은 Func; 표현식이 아닌 일반 대리자를 나타냅니다. 컴파일러는 람다를 Expression<> 이 변환은 일반적인 Func

중간 언어(IL)를 분해하고 원래 표현식을 추론하면 필요한 데이터가 최적화되지 않은 경우 이러한 변환이 가능할 수 있습니다. 그러나 이는 복잡하고 잠재적으로 신뢰할 수 없는 접근 방식입니다.

위 내용은 .NET Func를 표현식으로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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