4

次のように文字列を翻訳する必要があります。

"DateTime.Now.AddDays(-7)"

それらの同等の式に。

私はDateTimeクラスにのみ興味があります。これを行うのに役立つ.Netに組み込まれているものはありますか、それとも自分の小さなパーサーを作成する必要がありますか?

4

1 に答える 1

1

FLEEを使用して、式の解析を行うことができます。以下のコードはSilverlightでテストされ、動作しています(完全なC#を信じています。式の作成に関して構文が少し異なる場合がありますが、とにかくこのように動作する可能性があります)

ExpressionContext context = new ExpressionContext();

//Tell FLEE to expect a DateTime result; if the expression evaluates otherwise, 
//throws an ExpressionCompileException when compiling the expression
context.Options.ResultType = typeof(DateTime);

//Instruct FLEE to expose the `DateTime` static members and have 
//them accessible via "DateTime".
//This mimics the same exact C# syntax to access `DateTime.Now`
context.Imports.AddType(typeof(DateTime), "DateTime");

//Parse the expression, naturally the string would come from your data source
IDynamicExpression expression = ExpressionFactory.CreateDynamic("DateTime.Now.AddDays(-7)", context);

//I believe there's a syntax in full C# that lets you evaluate this 
//with a generic flag, but in this build, I only have it return type 
//`Object` so we cast (it does return a `DateTime` though)
DateTime date = (DateTime)expression.Evaluate();

Console.WriteLine(date); //January 25th (7 days ago for me!)
于 2013-02-01T14:51:51.280 に答える