Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将布尔值一般格式化为是/否字符串?_C#_Formatting_Coding Style_String Formatting - Fatal编程技术网

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

C# 如何将布尔值一般格式化为是/否字符串?,c#,formatting,coding-style,string-formatting,C#,Formatting,Coding Style,String Formatting,我想根据一些布尔变量以不同的语言显示是/否。 是否有一种通用方法可以根据传递给它的区域设置对其进行格式化? 如果没有,除了boolVar之外,格式化布尔值的标准方法是什么?资源。是:资源。否 我猜涉及boolVar.ToString(IFormatProvider)。 我的假设正确吗?据我所知,框架本身并没有为您提供这一点。将true/false翻译成yes/no对我来说并不比其他可能的翻译更常见(例如on/off,选中/未选中,只读/读写或其他任何形式) 我认为封装行为的最简单方法是创建一个扩

我想根据一些布尔变量以不同的语言显示是/否。
是否有一种通用方法可以根据传递给它的区域设置对其进行格式化?
如果没有,除了
boolVar之外,格式化布尔值的标准方法是什么?资源。是:资源。否

我猜涉及
boolVar.ToString(IFormatProvider)


我的假设正确吗?

据我所知,框架本身并没有为您提供这一点。将
true/false
翻译成
yes/no
对我来说并不比其他可能的翻译更常见(例如
on/off
选中/未选中
只读/读写
或其他任何形式)

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

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

bool someValue = GetSomeValue();
Console.WriteLine(someValue.ToYesNoString());
不幸的是,在这里没有帮助:

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


在任何情况下,布尔表示真与假,而不是是与否。如果你想映射真->是与假->否,你必须自己去做(包括本地化);在这个框架中没有内置的支持。您推荐的解决方案(参考资料。是/否)在我看来很好。

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

根据,当有3节“;”时,指定的格式将应用于“正数;负数;零”

可以对bool值调用GetHashCode方法来返回一个数字,因此可以使用自定义数字格式字符串来返回Yes/No、on/Off或情况所需的任何其他单词集

下面是一个返回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

在我的剃须刀页面中,工作如下:
@(item.Active.GetValueOrDefault()?“是”:“否”)

如果属性是必需的(可为Null),这一点很重要,如果属性是必需的,它应该适合:

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

我在另一篇文章中发现了这一点,只是在重复,希望它能有所帮助。

什么类型的应用程序winform,asp.net@仇杀:这有关系吗?正是这个框架导致了这个问题。在这种情况下,它是ASP.NET MVC,但以后也可能是winforms或WPF。您可以在user32.dll中找到Yes/No的本地化版本:我为此创建了一个uservoice,我已经在这样做了,但我想知道是否有更好的解决方案。对于可为null的bool,将此重载添加到类:public static string to yesnostring(此bool?值){return value.HasValue?value.value.ToYesNoString():String.Empty;}这是一个非常好的技巧,但它很粗糙,所以我保留了接受的答案。非常感谢。使用Convert.ToInt32(value)比GetHashCode()更简单;它还将返回0和1。+1:在ASP.NET中,此技巧可以在
FormatString
属性中完成,如
GridView
BoundField.DataFormatString
。只需向模型添加一个字节(或Int16或Int32等)属性,该属性返回布尔值的数字转换。就这样。非常感谢。允许布尔值使用自定义格式字符串。此问题当前标记为“未来”里程碑。的代码只是
value?1:0
,因此您只需使用它添加更多条件求值。我看不出有什么意义。(你永远不会注意到速度上的差异,只是更加混乱,没有任何好处)太好了,谢谢。在我的控制器中用于excel提取。sw.WriteLine(string.Format(“\”{0}\”…,item.IsCycle1?:“,”…))