ExpressionParser
ExpressionParser copied to clipboard
bug: Evaluator.cs IsDate(...) & IsNumber(...)
seems to have a bug in code when i was testing... original is:
static bool IsDate(string lhs, string rhs, out DateTime lhsDate, out DateTime rhsDate)
{
lhsDate = default(DateTime);
rhsDate = default(DateTime);
if (DateTime.TryParse(lhs, out lhsDate))
{
DateTime.TryParse(rhs, out rhsDate);
return true;
}
else if (DateTime.TryParse(rhs, out rhsDate))
{
DateTime.TryParse(lhs, out lhsDate);
return true;
}
return false;
}
static bool IsNumber(string lhs, string rhs, out decimal lhsNumber, out decimal rhsNumber)
{
lhsNumber = 0;
rhsNumber = 0;
if (decimal.TryParse(lhs, ExpressionToken.NumberParseStyle, CultureInfo.CurrentCulture, out lhsNumber))
{
decimal.TryParse(rhs, ExpressionToken.NumberParseStyle, CultureInfo.CurrentCulture, out rhsNumber);
return true;
}
else if (decimal.TryParse(lhs, ExpressionToken.NumberParseStyle, CultureInfo.CurrentCulture, out lhsNumber))
{
decimal.TryParse(rhs, ExpressionToken.NumberParseStyle, CultureInfo.CurrentCulture, out rhsNumber);
return true;
}
return false;
}
note that IsDate() will fail on runtime and IsNumber() seems to have called lhs side again in else if code... instead of calling rhs side. I provide a simple fix here:
static bool IsDate(string lhs, string rhs, out DateTime lhsDate, out DateTime rhsDate)
{
lhsDate = default(DateTime);
rhsDate = default(DateTime);
bool lhsOk = DateTime.TryParse(lhs, out lhsDate);
bool rhsOk = DateTime.TryParse(rhs, out rhsDate);
if (lhsOk)
{
return rhsOk;
}
else if (rhsOk)
{
return lhsOk;
}
return false;
}
static bool IsNumber(string lhs, string rhs, out decimal lhsNumber, out decimal rhsNumber)
{
lhsNumber = 0;
rhsNumber = 0;
bool lhsOk = decimal.TryParse(lhs, ExpressionToken.NumberParseStyle, CultureInfo.CurrentCulture, out lhsNumber);
bool rhsOk = decimal.TryParse(rhs, ExpressionToken.NumberParseStyle, CultureInfo.CurrentCulture, out rhsNumber);
if (lhsOk)
{
return rhsOk;
}
else if (rhsOk)
{
return lhsOk;
}
return false;
}