1

実行時に式を評価するための DataColumn 実装があります。驚いたことに、DataColumn 操作はビット演算子をサポートしていません。

個々のビット セットまたはビット セットのグループをチェックする必要があります。例:

(Value & 0x0002)2 番目のビット セットを確認します。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();
}
4

2 に答える 2

2

http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression%28v=vs.110%29.aspx これらの式はビット単位の演算を処理できません。

于 2014-01-03T14:10:13.840 に答える