これが私のインターフェイスと列挙型で、少し馬鹿げています。:
public interface IExpression
{
ExpressionType ExpressionType { get; }
}
public interface ILiteralExpression : IExpression
{
object Value { get; set; }
}
public interface IOperatorExpression : IExpression
{
IExpression[] Operands { get; set; }
string OperatorUniqueName { get; set; }
IOperatorExpression SetOperand(int index, IExpression expression);
}
public enum ExpressionType
{
Operator,
Literal
}
式を作成するには、次のようにします。
var expression = ExpressionManager.Engines["Default"].Parser.Parse("1 + 3 * 4 + \"myVariable\"");
これは次のようなものと同等です:
var expression1 = ExpressionManager.CreateOperator("Add", 2).
SetOperand(0, ExpressionManager.CreateOperator("Add", 2).
SetOperand(0, ExpressionManager.CreateLiteral(1)).
SetOperand(1, ExpressionManager.CreateOperator("Multiply", 2).
SetOperand(0, ExpressionManager.CreateLiteral(3)).
SetOperand(1, ExpressionManager.CreateLiteral(4)))).
SetOperand(1, ExpressionManager.CreateLiteral("myVariable"));
私はこのようなことを(効率的に)できるようにしたいと思います:
(from e in expression
where e is ILiteralExpression && "myVariable".Equals(((ILiteralExpression)e).Value)
select (ILiteralExpression)e).ToList().
ForEach(e => e.Value = 2);
の実装などを行う必要があると思いますがIQueryable
、どこから始めればよいかわかりません。助言がありますか?