매번 AST를 해석하는 대신 표현식 트리로 실행하기 위해 스크립팅 지원을 사용하여 기존 템플릿 솔루션을 다시 작성하고 있습니다. 기존 스크립트로 작업하십시오.표현 트리, 반환 된 데이터 유형 (문자열, 정수, 부동 소수점)을 전환하는 방법
현재 달성하려는 것은 사실을 테스트 할 솔루션을 만드는 것입니다.
Ex. 널 또는 비어있는 문자열은 0으로 거짓으로 간주되고 절대 값이 0.0001 미만인 십진 값으로 간주됩니다. "true"와 "false"는 대문자와 소문자가 구별되며, 문자열 "null"은 false입니다.
유효한 입력 유형은 float, int, string 및 bool뿐입니다.
표현식 트리로 컴파일 할 수있는 모든 솔루션이 유효하며 개체를 테스트 할 기존 방법이 있지만 외부 메서드를 호출하는 데 좋은 예제를 찾을 수 없습니다.
모든 예제는 상수 값에서 작동하거나 인수를 허용하지 않습니다.
업데이트
나는 "Expression.ABC"방법을 사용하여 트리를 구축하고 있지만 식의 결과의 유형 (문자열, INT, 플로트)을 전환 할 수있는 방법을 자금 문제가있는 나무.
현재 구문은 모든 것을 문자열로 저장하고 연산에 따라 int와 float로 구문 분석하고 실패 할 경우 기본값을 반환합니다.
오류가 발생하지 않도록 설계되었으며 템플릿에 잘못된 구문이 제공된 경우에도 항상 결과를 생성하는 데 성공합니다.
업데이트
예 (100 % 정확하지하지만 현재의 통역을 예시하기 위해)
string Evaluate(Expr e) {
switch(Expr.Type) {
case "istrue":
ExprValue value = Evaluate(Expr.Child);
switch(value.Type) {
case "String":
if(String.IsNullOrWhiteSpace(value.ToString()) || value.ToString().ToLower() == "false" || value.ToString().ToLower() == "null" || value.ToInt() == 0) return false;
case "Int":
return value.ToInt() != 0;
case "Float":
}
}
}
* 업데이트 * 변경 제목
나는 표현식을 사용하여 나무를 짓고있다. 구문,하지만 식의 결과 형식을 전환 할 수있는 방법을 찾지 못했습니다. Add 또는 Multiply 또는 Concatenation이있는 경우 표현식의 유형 (Add, Multiply, concat)이 아닌 결과의 유형 (int, float, string)을 어떻게 전환합니까? –
오늘 나중에 예제를 만들려고합니다. –
예제로 재 작업하려고 할 때, 내가 원하는 것은 표현식 트리에서 수행하는 것이 거의 불가능하므로 솔루션을 포기하고 새로운 디자인으로 시작했습니다. –