【发布时间】:2014-01-03 13:44:05
【问题描述】:
我有一个 DataColumn 实现来在运行时评估表达式。令我惊讶的是,DataColumn 操作似乎不支持按位运算符。
需要检查单个位组或位组。例子:
(Value & 0x0002) 检查第二位设置。应返回 true (1)。
((Value & 0x000F) == 0x03) 检查 Value 的前 4 位是否为 3。
有没有办法使用 DataColumn 类来支持这些按位运算?
是否有支持按位运算的 DataColumn 替代方案?
关于如何使用常用数学运算符的建议?
[编辑 - 完整的功能代码]
public static bool EvaluateExpression(string expression, object value, out object returnValue, out string errorMessge)
{
try
{
errorMessge = String.Empty;
///
/// First substitute the references of object with its value
///
string evalExpression = expression.Replace("[this]", Convert.ToString(value));
///
/// Now evaluate the expression
///
DataTable loDataTable = new DataTable();
double dummyResult;
DataColumn loDataColumn;
if (Double.TryParse(evalExpression, out dummyResult))
loDataColumn = new DataColumn("Eval", typeof(double), evalExpression);
else
loDataColumn = new DataColumn("Eval", typeof(string), evalExpression);
loDataTable.Columns.Add(loDataColumn);
loDataTable.Rows.Add(0);
returnValue = (object) loDataTable.Rows[0]["Eval"];
return true;
}
catch (Exception e)
{
errorMessge = e.Message.ToString();
returnValue = 0;
return false;
}
}
在示例中调用函数...
.
.
.
.
object val = (object) 12538;
string errorMsg = String.Empty;
object result;
string expr = "[this] & 0x02";
if (!EvaluateExpression (expr, val, result, errorMsg))
{
Console.WriteLine("Error on expression. Error = " + errorMsg);
}
else
{
Console.WriteLine("The resulting valur is " + val.ToString();
}
【问题讨论】:
-
我们可以再看一些代码吗?
-
如何设置
Value?什么是Value? -
已发布代码。除了我现在需要支持的按位运算符之外,该函数在一段时间内对所有常见的数学运算都可以正常工作。 [this] 更改为给定值。价值只是为了说明一些价值。
-
来吧,发布的代码甚至没有尝试按位运算。
-
对您的不理解深表歉意。按位运算在运行时构建。喜欢:EvaluateExpression ("[this] & 0x03", (object) 12, our result, out error)...这就是为什么原始问题不包含代码...
标签: c# math datacolumn