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

发布于 2024-12-21 04:19:52 字数 345 浏览 3 评论 0原文

是否可以转换像 x => 这样的 lambda 表达式? x + 1.5 使用特定区域性/格式选项来字符串?我知道我可以这样做:

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

但是通过某些应用程序语言设置,它给出的 s 等于 "x + 1,5" (用逗号而不是点)。看来 ToString() 获取当前的文化信息。

如何以文化不变的原始形式恢复字符串?

Is it possible to convert a lambda expression like x => x + 1.5 to string using specific culture/format options? I know I can do:

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

But with some app language settings it gives s equal to "x + 1,5" (with a comma instead of a dot). It seems that ToString() takes current culture info.

How to get back the string in its original form, culture-invariant?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

绾颜 2024-12-28 04:19:53

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

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

There is a way to do it, but it's really ugly... just change the current culture temporarily:

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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文