У меня есть реализация DataColumn для оценки выражений во время выполнения. Для моего удивления операции DataColumn не поддерживают побитовые операторы.Класс DataColumn с использованием побитового оператора не работает
Необходимо проверить отдельные биты или группы битов. Примеры:
(Value & 0x0002)
для проверки наличия второго набора бит. Вернуть true (1).
((Value & 0x000F) == 0x03)
, чтобы проверить, если первые 4 бита Значение имеет значение 3.
Есть ли способ, чтобы поддержать эти битовые операции с использованием класса DataColumn?
Есть ли альтернатива DataColumn, которая поддерживает побитовые операции?
Предложения о том, как это сделать, используя общие математические операторы?
[EDIT - Полный код функции]
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();
}
Можем ли мы увидеть больше какой-то код? – geedubb
Как вы устанавливаете 'Value'? Что такое «Ценность»? –
Отправленный код. Функция работает отлично в течение некоторого времени для всех общих математических операций, за исключением побитовых операторов, которые мне нужно поддерживать сейчас. [this] изменяется на заданное значение. Значение было просто для иллюстрации некоторой ценности. – Mendes