2014-05-24 7 views
1

RazorEngine은 ASP.NET MVC4 응용 프로그램에서 C# 면도기보기를 실행하는 데 사용됩니다.면도기보기에서 DivideByZeroException을 무시하는 방법

조회수이 예외를 발생

<div>@Format(somedecimalexpression/someotherdecimalexpression)</div> 

같은 사용자 정의 형식의 함수 호출에 감싸 진 표현식을 포함

someotherdecimalexpression 값은
Attempted to divide by zero 

경우 0

으로 나누기를 무시 면도기 엔진을 강제하는 방법 제로 예외? 이 경우 큰 10 진수 또는 빈 문자열에 대해 null을 반환 할 수 있습니다.

표현식은 런타임에 최종 사용자가 만듭니다. 데이터베이스 필드에 10 진수 형식이 있으므로이 예외를 제거하기 위해 모든 피연산자를 double로 변환하기가 어렵습니다.

프로젝트 속성에서 인공적 오버플로가 선택되어 있는지 확인하지 않았지만 도움이되지 않습니다. 나는

public string Eval(string expression) { 

try { 

    return Format(Run(expression)); 
} 
catch (DivideByZeroException) { 
    return "" 
} 

} 

<div>@Eval("somedecimalexpression/0")</div> 

및 템플릿 기본 클래스에서 시도했지만 방법을 실행하지 있기 때문에 오류를 컴파일 얻었다.

+1

논리에 뷰를 배치하지 마십시오. 그래서 당신은 – Uriil

답변

1

는 다음 작업을 수행 할 수 있다면 당신은을 사용하여 오류가 주위를 얻을 수 있습니다 모든 someotherdecimalexpression ~ double을 계산하면 예외가 아닌 Infinity이됩니다.

name과 같은 "부작용"을 알고 있어야합니다. "텍스트"...

1

나는 Uriil의 의견에 동의합니다.

string name = "someotherdecimalexpression"; 
template = template.Replace(name, "(double)" + name); 

것은이 변환됩니다 : 당신은 여전히 ​​뷰의 논리를 원하는 경우 런타임에 someotherdecimalexpression의 이름을 알고있는 경우

<div> 
    @if(someotherdecimalexpression != 0){ 
     Format(somedecimalexpression/someotherdecimalexpression) 
    } 
</div> 
+0

표현식이 복잡 할 수있는 형식으로 나누기를 표시 할 수있는 다른 readonly 속성을 추가 할 수 있습니다. 구분 수, .NET 메소드 호출 및 기타 artimethics 연산을 포함 할 수 있습니다. 어떻게 나누기 오류를 일으킬 수있는 다른 모든 식을 찾아야합니까? 가능한 답을 제로로 찾기 위해 수식을 수동으로 구문 분석해야합니다. 이것을 구현하는 방법? – Andrus