Expression.ToString () с поставщиком формата - PullRequest
2 голосов
/ 13 декабря 2011

Можно ли преобразовать лямбда-выражение типа x => x + 1.5 в строку, используя определенные параметры языка / формата? Я знаю, что могу сделать:

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

Но с некоторыми настройками языка приложения он выдает s, равный "x + 1,5" (с запятой вместо точки). Похоже, что ToString () принимает текущую информацию о культуре.

Как вернуть строку в ее первоначальном виде, инвариантном к культуре?

1 Ответ

2 голосов
/ 13 декабря 2011

Есть способ сделать это, но это действительно уродливо ... просто временно измените текущую культуру:

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;
}
...