C# 使用位运算符的DataColumn类不起作用
我有一个DataColumn实现来在运行时计算表达式。令我惊讶的是,DataColumn操作似乎不支持按位运算符 需要检查单个位集或组位集。示例:C# 使用位运算符的DataColumn类不起作用,c#,math,datacolumn,C#,Math,Datacolumn,我有一个DataColumn实现来在运行时计算表达式。令我惊讶的是,DataColumn操作似乎不支持按位运算符 需要检查单个位集或组位集。示例: (值&0x0002)检查第二位设置。应返回true(1) ((Value&0x000F)==0x03)检查值的前4位的值是否为3 有没有办法使用DataColumn类来支持这些按位操作 是否有支持按位操作的DataColumn替代方案 关于如何使用常用数学运算符的建议 [编辑-完成功能代码] public static bool EvaluateEx
(值&0x0002)
检查第二位设置。应返回true(1)
((Value&0x000F)==0x03)
检查值的前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();
}
这些表达式不能处理按位操作。根据@sdf,它们不支持按位操作,但可以使用可用的运算符模拟某些按位操作。例如:
相当于[this]&0x02
IIF(转换([this]/2,'System.Int32')%2=0,0,2)
相当于[this]| 0x02
IIF(Convert([this]/2,'System.Int32')%2=0,[this]+2,[this])
相当于[this]>>2
转换([this]/4,'System.Int32')
[this]我们可以再看一些代码吗?如何设置
?什么是值
?发布的代码。对于所有常见的数学运算,该函数都可以正常工作一段时间,但我现在需要支持的位运算符除外。[此]更改为给定值。值只是为了说明一些值。来吧,发布的代码甚至没有尝试按位运算。很抱歉您不理解。按位操作是在运行时生成的。比如:EvaluateExpression(“[this]&0x03”,(object)12,我们的结果,out error)。。。这就是为什么最初的问题不包含代码…这就是我现在发现的。所以,我需要使用数学运算符或其他方法来更改它。有什么建议吗?为什么要为此使用DataColumn类?也许你应该这样做:原因是这是一个非常简单的代码,没有额外的库。C#解析器要复杂得多,我真的需要只支持简单的操作,而不是语言解析器。我们不久前就这样做了,而且效果很好。问题是,现在我需要支持位,但它不支持。。。我需要一个简单的方法…+这个,但是OP必须先解析字符串,然后再将其填充到DataColumn中,得到他将使用的操作并替换这些操作。在他解析字符串以获取操作符号时,获取args并将其传递给执行此操作的本机代码函数可能很简单。也许这就是他从一开始就在做的?是的,当然,除非原始字符串可以修改。他没有说它是从哪里来的……现在解决我的问题是可以接受的,但我认为我需要设计一个新的支持按位的解析器。我正在检查像和这样的帖子。最后一个看起来是完整的和可定制的,但需要一些时间。关于值,表达式可由用户配置,值来自DB数据。我以前不知道,因为每个用户都会有不同的表达式,运行在实时数据库数据上……无法工作。当我们这样做的时候,它把它变成了double,不能被模化为2。所以它引发了一个异常…您是否尝试过转换,如上图所示?然而,解析器并不是那么难,而且绝对是正确的解决方案。值