小写布尔值的ToString()值

17

我在ASP.NET MVC Framework视图中输出一个布尔值的值,想要得到小写的truefalse,而不是默认的TrueFalse

我知道我可以这样做:

@this.Model.MyBool.ToString().ToLower()

或者,我可以创建一个扩展方法。但这违背了以下目的:

@this.Model.MyBool

我已经阅读了帖子为什么Boolean.ToString输出“True”而不是“true”,但大多数答案都比较旧。

是否有更现代的方法来完成这个任务?


为什么不使用属性来满足您的需求? - Mohamed
https://dev59.com/I3RB5IYBdhLWcg3w26x3 - mike
4个回答

16

如果您只需要一个布尔变量,您应该使用 @Mohamed 的方法。否则,您可以创建一个扩展方法(正如您自己已经提到的):

public static class Extensions
{
    public static string ToLowerString(this bool _bool)
    {
        return _bool.ToString().ToLower();
    }
}

然后使用它:

public static void Main()
{
    bool testBoolean = true;
    Console.WriteLine(testBoolean.ToLowerString());
}

2
return _bool ? "true" : "false" 的速度比(经过测量)快15倍。 - Alex from Jitbit

15

何不尝试以下方法

public string MyStringBool
{
    get { return MyBool ? "true" : "false" ; }
}

2
这很好,避免了冒险实现细节。请参阅Jon Hanna的评论https://dev59.com/I3RB5IYBdhLWcg3w26x3 - goodeye

5

我认为下面的写法在语法上更简洁:true.ToString().ToLower()

Json.Encode(true);

然而,在实现上,这比使用.ToString.ToLower()更加繁琐。

Json.Encode(object value)需要更多的错误处理,因为它需要考虑到作为参数传递的更复杂的对象的可能性。

我对此进行了一些基准测试,以查看实际差异,并在我的开发电脑上进行了测试:

var sw0 = Stopwatch.StartNew();
sw0.Stop();

var sw1 = Stopwatch.StartNew();
var t1 = System.Web.Helpers.Json.Encode(true);
var e1 = sw1.ElapsedMilliseconds; // returns 6-9

var sw2 = Stopwatch.StartNew();
var t2 = true.ToString().ToLower();
var e2 = sw2.ElapsedMilliseconds; // returns 0

所以对于一次性的影响并不是很大。

那是一个有趣的选择。 - Jeremy Caney
如果您在 XML 上下文中进行此操作,另一种选择是 System.Xml.XmlConvert.ToString(bool value) - R. Schreurs

1

看起来微软推荐以下内容(如果您需要用于XML):

public static class BoolExtensions
{
     public static string ToLowerString(this bool _bool)
     {
         return _bool.ToString().ToLowerInvariant();
     }
}

[ToString.()]返回常量"True"或"False"。请注意,XML区分大小写,并且XML规范将"true"和"false"识别为有效的布尔值集合。如果要将ToString(IFormatProvider)方法返回的字符串对象写入XML文件,则应首先调用其String.ToLowerInvariant方法将其转换为小写。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接