具有格式提供程序的Expression.ToString()

时间:2011-12-13 19:17:18

标签: c# .net lambda expression

是否可以使用特定的culture / format选项将lambda表达式(如x => x + 1.5)转换为字符串?我知道我能做到:

Expression<Func<double,double>> expr = x => x + 1.5;
string s = expr.Body.ToString();

但是使用某些应用语言设置,它会使s等于"x + 1,5"(使用逗号而不是点)。似乎ToString()获取当前的文化信息。

如何以原始形式取回字符串,文化不变?

1 个答案:

答案 0 :(得分:2)

有一种方法可以做到这一点,但它真的很难看......暂时改变当前的文化:

var previousCulture = Thread.CurrentThread.CurrentCulture;
try
{
    Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
    Expression<Func<double,double>> expr = x => x + 1.5;
    string s = expr.Body.ToString();
}
finally
{
    Thread.CurrentThread.CurrentCulture = previousCulture;
}