the*_*row 45 c# formatting coding-style string-formatting
我想根据一些布尔变量在不同的语言中显示是/否.
是否有一种通用的方法根据传递给它的语言环境对其进行格式化?
如果没有,那么格式化布尔值的标准方法是什么boolVar ? Resources.Yes : Resources.No.
我猜这boolVar.ToString(IFormatProvider)涉及到了.
我的假设是否正确?
Fre*_*örk 61
框架本身并没有为你提供这个(据我所知).翻译true/false成yes/no不罢工我比其他潜在的翻译更常见(如on/off,checked/unchecked,read-only/read-write或其他).
我想,封装行为的最简单方法是创建一个扩展方法,它包含你在问题中建议的构造:
public static class BooleanExtensions
{
public static string ToYesNoString(this bool value)
{
return value ? Resources.Yes : Resources.No;
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
bool someValue = GetSomeValue();
Console.WriteLine(someValue.ToYesNoString());
Run Code Online (Sandbox Code Playgroud)
jha*_*amm 44
正如其他答案所示,框架不允许布尔值具有自定义格式化程序.但是,它确实允许数字具有自定义格式.布尔值上的GetHashCode方法将返回1表示true,0表示false.
根据MSDN自定义数字格式字符串,当有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());
Run Code Online (Sandbox Code Playgroud)
收益:
truth = on
unTruth = OFF
Run Code Online (Sandbox Code Playgroud)
Hei*_*nzi 11
不幸的是,Boolean.ToString(IFormatProvider)在这里没有帮助:
该提供参数被保留.它不参与此方法的执行.这意味着与大多数带有provider参数的方法不同,Boolean.ToString(IFormatProvider)方法不反映特定于文化的设置.
在任何情况下,布尔代表是真和假,而不是是和否.如果你想映射真 - >是和假 - >否,你必须自己做(包括本地化); 框架中没有内置的支持.您提出的解决方案(Resources.Yes/No)对我来说很好.
小智 5
在我的剃须刀页面中是这样工作的:
@(item.Active.GetValueOrDefault() ? "Yes" : "No")
如果属性是必需的(可为空的)与否,这里很重要,如果需要,它应该适合:
@(item.Active ? "Yes":"No")
Run Code Online (Sandbox Code Playgroud)
我在其他一些帖子中找到了这个,只是重播,希望它对某些人有所帮助。