如何将布尔值一般格式化为是/否字符串?

时间:2011-04-12 09:16:04

标签: c# formatting coding-style string-formatting

我想根据一些布尔变量在不同语言中显示是/否 是否有通用的方法根据传递给它的语言环境对其进行格式化? 如果没有,除了boolVar ? Resources.Yes : Resources.No之外,格式化布尔值的标准方法是什么 我猜这涉及boolVar.ToString(IFormatProvider) 我的假设是否正确?

4 个答案:

答案 0 :(得分:58)

框架本身并没有为您提供此功能(据我所知)。将true/false翻译为yes/no并不会让我比其他潜在翻译更常见(例如on/offchecked/uncheckedread-only/read-write或其他任何内容。

我认为封装行为的最简单方法是创建一个扩展方法来包装您在问题中建议的构造:

public static class BooleanExtensions
{
    public static string ToYesNoString(this bool value)
    {
        return value ? Resources.Yes : Resources.No;
    }
}

用法:

bool someValue = GetSomeValue();
Console.WriteLine(someValue.ToYesNoString());

答案 1 :(得分:42)

正如其他答案所示,框架不允许布尔值具有自定义格式化程序。但是,它确实允许数字具有自定义格式。布尔值上的GetHashCode方法将返回1表示true,0表示false。

根据MSDN Custom Numeric Format Strings,当有3个部分“;”时指定的格式将应用于“正数;负数;零”。

可以在bool值上调用GetHashCode方法以返回一个数字,这样您就可以使用自定义数字格式字符串返回Yes / No或On / Off或该情况所需的任何其他单词集。

这是一个返回开/关的示例:

var truth   = string.Format("{0:on;0;OFF}", true.GetHashCode());
var unTruth = string.Format("{0:on;0;OFF}", false.GetHashCode());

返回:

truth   = on
unTruth = OFF

答案 2 :(得分:11)

不幸的是,Boolean.ToString(IFormatProvider)在这里没有帮助:

  

保留提供程序参数。它不参与此方法的执行。这意味着与大多数具有提供程序参数的方法不同,Boolean.ToString(IFormatProvider)方法不反映特定于文化的设置。

在任何情况下,布尔代表是真和假,而不是是和否。如果你想映射真 - >是和假 - >不,你自己必须这样做(包括本地化);框架中没有内置的支持。您提出的解决方案(Resources.Yes / No)对我来说很好。

答案 3 :(得分:1)

我的剃须刀页面中的

正在运行: @(item.Active.GetValueOrDefault() ? "Yes" : "No")

在这里,是否需要属性(可为空)很重要,如果需要,它应该适合:

@(item.Active ? "Yes":"No")

我在其他帖子上找到了这个,只是在重播,希望对您有帮助。