【问题标题】:Expression.ToString() with format provider带有格式提供程序的 Expression.ToString()
【发布时间】:2011-12-13 19:17:17
【问题描述】:

是否可以使用特定的文化/格式选项将像 x => x + 1.5 这样的 lambda 表达式转换为字符串?我知道我能做到:

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

但在某些应用语言设置下,s 等于 "x + 1,5"(用逗号代替点)。似乎 ToString() 需要当前的文化信息。

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

【问题讨论】:

    标签: c# .net lambda expression


    【解决方案1】:

    有办法做到,但是真的很丑……只是暂时改变一下现在的文化:

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

    【讨论】:

    • 知道为什么这不起作用吗? string.Format(CultureInfo.GetCultureInfo("en-US"), "{0}", expr.Body)
    • 感谢您的回复。请问在这种情况下try 块是什么?您预计哪里会发生异常?
    • @rook,实际上在这种情况下它并不是很有用,但是当我暂时更改全局状态(例如当前的文化)时,我想确保我把它放回原来的样子,应该任何事情发生。 finally 块是确保这一点的好方法。
    • @SebastianPiu,这仅在格式化类型实现 IFormattable 时才有效
    猜你喜欢
    • 2012-08-26
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多