2

emum で条件付きの動的クエリを作成しようとしています

enumField & enumValue == enumValue

このために、分析中に以下が呼び出されます

Expression GenerateBitWiseAnd(Expression left, Expression right) {
    return Expression.And(left, right);
}

これは例外をスローします

And binary operator is not defined for `EnumType` and `EnumType`.

等値演算子はうまく機能します

Expression GenerateEqual(Expression left, Expression right) {
    return Expression.Equal(left, right);
}

しかし、And ビット演算子なしで [Flags] を処理する方法がわかりません。

問題は、ここから、クエリを動的に偽造して列挙型をチェックする方法です。

私のアプリケーションは .Net 4 をターゲットにしています

4

1 に答える 1

1

Enum操作する前に、 を基になる型に変換する必要があります。

Expression GenerateBitWiseAnd(Expression left, Expression right) 
{
   if (left.Type.IsEnum)
   {
      var enumType = left.Type;
      var compareType = Enum.GetUnderlyingType(enumType);
      var enumField = Expression.Convert(left, compareType);
      var enumValue = Expression.Convert(right, compareType);
      var and = Expression.And(enumField, enumValue);
      return Expression.Convert(and, enumType);
   }

   return Expression.And(left, right);
}
于 2013-06-06T18:40:41.657 に答える