C#과 VB의 식 트리 차이입니다.그물
저는 표현 트리를 연구하는 도서관이 있습니다.라이브러리는 C#과 VB 모두에서 작동해야 합니다.그물
표현 트리가 구성되는 방식에 대한 언어 간의 몇 가지 차이점을 발견했습니다.
문자열 비교
() => "a" == "b"
된다Expression.Equals("a", "b")
Function() "a" = "b"
된다Expression.Equals(Expression.Call(CompareString, "a", "b"), 0)
(VB의 이유를 이해합니다.Net은 여기서 CompareString 사용)문자열 연결
() => "a" + "b"
된다Expression.Add("a", "b", String.Concat)
Function() "a" & "b"
된다Expression.Call(String.Concat, "a", "b")
최적화?
() => !(1 == 2)
된다Expression.Not(Expression.Equals(1, 2))
Function() Not (1 = 2)
된다Expression.NotEqual(1, 2)
제 도서관은 이 모든 차이를 처리하지만 제가 더 주의해야 할 차이점이 있나요?
내 코드가 수행하는 작업에 대한 일부 설명을 편집합니다.
사용하는 시스템에는 다음과 같이 지정하는 문서에 대한 필터가 있습니다.
var filter = document.Filter;
filter.LeftParanthesis();
filter.Column(columnNumber);
filter.Equals();
filter.Value("abc");
filter.RightParanthesis();
filter.And();
filter.LeftParanthesis();
...
document.Refresh();
필터를 보다 쉽게 사용할 수 있도록 내 코드를 사용하여 필터를 다음과 같이 지정할 수 있습니다.Expression<Func<bool>>
람다의
Expression<Func<bool>> filter = () => (123.AsStringColumn() == "abc") && (...);
filter.Apply(document);
그런 다음 내 코드는 식 트리를 반복하고 위에서 지정한 대로 문서 필터 메서드를 호출합니다.필터가 람다에 넣을 수 있는 모든 것을 지원하지는 않습니다.메소드 호출이 가장 확실합니다.
VB부터.Net은 C#이 메서드 호출을 인터셉트하고 다르게 처리할 필요가 없는 경우에 메서드 호출을 생성합니다.
그/
나눗셈 연산자는 C#과 VB에서 다르게 작동합니다.C#에서 VB는 항상 피연산자를 부동 소수점 값으로 변환하는 동안 사용되는 데이터 유형에 적응합니다.
() => 1 / 2
된다Expression.Divide(1, 2)
Function() 1 / 2
된다Expression.Divide(Expression.Convert(1, Double), Expression.Convert(2, Double))
VB에서는 다음을 사용해야 합니다.\
정수 나눗셈을 위한 연산자 및/
부동 소수점 분할이 다음과 같은 값을 얻을 수 있습니다./
연산자(C#)입니다.
저는 C#과 VB와 함께 일해야 했습니다.내 프로젝트와 자주 관련된 넷과 VB 때 보았던 대부분의 차이점.네트워크가 안전하지 않은 모드에 있습니다.만약 우리가 VB를 만든다면.Net typesafe(옵션 제한적, 옵션 명시적... 옵션 올온)는 C#과 같이 작동합니다.
언급URL : https://stackoverflow.com/questions/16103529/expression-tree-differences-between-c-sharp-and-vb-net
'programing' 카테고리의 다른 글
'의 의미합니까?IISReset' do? (0) | 2023.06.11 |
---|---|
Oracle의 DATEADD()에 대한 동등한 기능 (0) | 2023.06.11 |
루비의 블록에 대한 do..end vs curly brace (0) | 2023.06.11 |
50개 이상의 열 이름을 입력하지 않고 동일한 테이블에 행 복사(2개의 열을 변경) (0) | 2023.06.11 |
data.frame의 두 열 사이에 열을 추가(삽입)합니다. (0) | 2023.06.11 |