식의 차이> 및 Func <>
이 질문에 이미 답변이 있습니다.
예를 들어, 대부분의 LINQ 연산자는 왜 Expression<Func<TSource>>
그에 상응하는 값을 수락 Func<TSource>
합니까?
Expression
람다 구문 대신 일반 클래스 를 사용하는 이점 / 이유는 무엇입니까 ?
를 사용 Expression<T>
하면 명시 적으로 표현식 트리가 생성 됩니다. 이는 쿼리를 구성하는 코드를 마치 데이터 인 것처럼 처리 할 수 있음을 의미합니다.
그 이유는 LINQ 공급자 (예 : LINQ to SQL)가 쿼리 자체를 검사하여 C # 식을 T-SQL 쿼리로 변환하는 가장 좋은 방법을 결정하기 때문입니다. 표현식 트리를 사용하면 코드를 데이터로 볼 수 있으므로 공급자가이를 수행 할 수 있습니다.
요약하면 둘 사이의 주요 차이점은 다음과 같습니다.
Expression<Func<...>>
되는 식 트리 원본 소스 코드를 나타내고, (아주 근접 원래 C # 코드이다 데이터 트리 구조에 저장된다). 이 형식에서는 소스 코드를 분석 할 수 있으며 LINQ to SQL과 같은 도구는 식 트리 (소스 코드)를 다른 언어 (예 : LINQ to SQL의 경우 SQL이지만 JavaScript 등을 대상으로 지정할 수도 있음)로 변환 할 수 있습니다.Func<...>
실행할 수있는 일반 대리자입니다. 이 경우 컴파일러는 표준 메서드를 컴파일 할 때와 마찬가지로 함수 본문을 IL (중간 언어)로 컴파일합니다.
런타임에 표현식을 컴파일하고를 생성 Expression<..>
하는 Compile
메서드가 Func<...>
있으므로 첫 번째에서 두 번째로 변환 (일부 성능 비용 포함) 이 있음을 언급 할 가치가 있습니다. 그러나 IL을 얻으면 원래 소스 코드를 재구성하는 것이 매우 어렵 기 때문에 (불가능) 두 번째 코드에서 첫 번째 코드로의 변환이 없습니다.
Func<T>
실행 가능한 함수를 만듭니다.
Expression<Func<T>>
함수의 코드를 데이터로 사용할 수있는 표현식 트리를 만듭니다.
식 트리를 사용하면 .NET 코드에서 기본 호출을 생성하여 LINQ to SQL 및 LINQ to XML과 같은 작업을 수행 할 수 있습니다.
An Expression<Func<>>
은 아직 코드로 변환되지 않은 함수의 표현입니다. A Func<>
는 실제 실행 가능한 함수입니다. 전자를 사용하면 표현식을 호출 할 때 적절한 함수로 바꿀 수 있습니다. 예를 들어 LINQ to SQL을 사용하면 SQL 문을 실행하고 지정된 내용을 반환하는 동등한 코드로 변환됩니다. LINQ to 개체를 사용하면 CLR을 사용하여 클라이언트에서 코드를 실행합니다. A Func<>
는 항상 CLR에서 실행되며 실행 가능한 코드입니다.
참고 URL : https://stackoverflow.com/questions/2664841/difference-between-expressionfunc-and-func
'programing tip' 카테고리의 다른 글
"::" "."의 차이점은 무엇입니까? (0) | 2020.10.18 |
---|---|
빛나는 앱에서 만든 플롯 저장 (0) | 2020.10.17 |
하위 도메인에서 localStorage 사용 (0) | 2020.10.17 |
System V IPC 대 POSIX IPC (0) | 2020.10.17 |
역할 및 권한이있는 Spring Security (0) | 2020.10.17 |