我在C#中面臨一個奇怪的問題,我需要評估一些數學字符串表達式,它可能會被0
分隔。下面是一個例子:如何評估可以除以零的C#中的字符串表達式?
string expression = GetUserInput(); // Example: "(x + y)/z", where z may equal to 0
我目前使用NCalc庫用於評估這個表達式中,其拋出一個DivideByZeroException
如果z
參數在當前表達式是0
。
我試圖做捕捉異常:
try {
string formula = GetUserInput();
Expression exp = new Expression(formula);
// ...
exp.Evaluate(); // Throws a DivideByZeroException
} catch (DivideByZeroException e) {
//ignored
}
在時間效率的方式。然而,我需要評估這個表達式超過6000倍(與不同的變量),每顯著時間,以便捕獲異常減慢我的應用程序。
我有多個這樣的表達式,每個表達式都是由用戶輸入的。我不知道一個給定的表達式是否試圖用零來除。
有沒有辦法在一個「安全」的方法來評估C#中的數學表達式,在試圖通過0
劃分將返回一個靜態的數字(0
,或無窮大),未拋出異常?
你應該分析你的表達和檢查,如果z是零一有什麼不同? – Thomas
你爲什麼認爲異常顯着減慢了你的應用程序? [它不應該影響太多](http://stackoverflow.com/questions/1308432/do-try-catch-blocks-hurt-performance-when-exceptions-are-not-thrown) –
@Thomas每次,表達是不同的(因爲它是由用戶鍵入的),我不知道它是否可以被零除。 – Victor2748