programing

C#과 VB의 식 트리 차이입니다.그물

starjava 2023. 6. 11. 10:14
반응형

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

반응형