在C#中,将bool转换为string的最简单方法是什么?

4

我想使用 if ... else ...,但我想知道是否有更简单的方法?我需要在消息框中显示真或假的结果。

10个回答

14

bool.ToString 方法已经可以实现你想要的功能。

该方法返回常量 "True" 或 "False"。

不过,在实际编码中,并不经常需要直接从代码中显式调用 ToString 方法。如果您已经在编写字符串,最简单的方法是使用连接符号:

string message = "The result is " + b;

这将编译为对string.Concat的调用,它会自动为您调用ToString方法。

在某些情况下,使用String.Format可能很有用,同样会为您调用ToString方法:

string message = string.Format("The result is {0}. Try again?", b);

8
是的,C# 不会进行隐式转换,而是会调用 ToString 方法。 - Sergey Teplyakov
6
@lincolnk说:String.Concat(在第一种情况下使用的方法)有重载,接受object参数,因此所提供的代码非常有效。(文档:http://msdn.microsoft.com/en-us/library/kbseaaft.aspx) - Fredrik Mörk
1
这一直都是这样吗?我怎么不知道呢? - lincolnk
2
虽然这段代码可行,但我个人更喜欢实际拼写出.ToString()。对我的眼睛更友好。 - NotMe
2
@Chris Lively - 此外,在 String.Concat 上调用 string 而不是 object 重载是一种微小的优化,可以避免在此情况下装箱布尔值。这让我对代码感到更好。 - Jeffrey L Whitledge
显示剩余2条评论

9
bool b = true;
Console.WriteLine(b.ToString());

我觉得有些东西丢失了 ;) 这是对我有效的代码:Console.WriteLine((false == !(b == true)).ToString()); - Ben Voigt

7

我只是要丢掉:

val ? "true" : "false"

将小写结果混合在一起通常是必要的(许多可机读格式,如许多XML格式,使用小写的“true”和“false”表示布尔值),因此将其与上述方法相比更快且更干净,而不是使用val.ToString().ToLowerInvariant()。当然,对val ? "yes" : "no"等进行扩展是微不足道的。本地化是另一个问题,不总是微不足道(如果翻译得好,很多情况下会有完全不同的句子,因此messageStart + (val ? "yes" : "no") + messageEnd的逻辑不总是奏效)。

bump - 生成的JavaScript是将布尔型转换成字符串的常见情况之一。至于后一点,这只是将(val ? "yes" : "no")作为格式化字符串的参数传递即可。 - annakata
1
@annakata,在后一点上,有些语言甚至没有翻译为“是”和“否”的单词(如爱尔兰语、苏格兰盖尔语;虽然在爱尔兰公投中提供了“ta”和"nil",但在更广泛的句子中它们不是一个好的翻译)。而且,许多语言中,句子的其余部分可能需要进行某种修改。通常情况下,您需要在资源中拥有完整的句子。 - Jon Hanna
过去曾经做过一些爱尔兰语的工作,现在有点担心当时的用户验收测试状态... :P - annakata
@annakata,这取决于上下文。如果英文中有一个字段只是说“yes”或“no”,那么将其翻译为“ta”或“nil”可能就可以了。在更广泛的从句中,这种方法效果不佳(这就是为什么我们这些甚至不会说爱尔兰语的人比其他地方的英语使用者更倾向于说“我是”而不是“yes”的原因,这是我们流利的爱尔兰语祖先的遗迹)。 - Jon Hanna

2
bool v = true;  
string s = v.ToString();

2
每个对象都可以使用的.ToString()有什么问题?
bool myBool = false;
string myString = myBool.ToString();

1

5
“我不认为‘在这个页面上找到它’算是一个真正的答案。评论更适合用于提示(和讽刺性挖苦)。” - jball
@jball 它被标记为“家庭作业”,我认为这里的标准程序不是为操作员完成所有工作。这样对吗? - lincolnk
OP引用了使用if ... else ...结构,这意味着他们可以自己解决作业问题,只是想知道是否有更好/更容易的方法。关于如何帮助作业的正确方式存在争议,但总的来说,我认为这个问题距离“如何解决我的作业复杂问题”的距离太远,答案可以直接给出。 - jball
我认为你的回答可以作为一条很好的评论。 - jball

1
  bool myBool = true;  
  MessageBox.show(myBool.toString());

1

通常建议在Convert类下使用静态函数。在您的情况下

bool boolValue = true; System.Convert.ToString(boolValue);


0
如果您想使其完全本地化,可以在项目中添加一个名为UiStrings的资源文件,并为每个布尔值添加一个条目。Visual Studio将为资源管理器生成一个包装器(使用PublicResXFileCodeGenerator或ResXFileCodeGenerator),然后您可以使用静态属性访问它。
然后,您可以像这样使用它:
var booleanValue = true;  
var booleanText = booleanValue ? UiStrings.TrueValueText : UiStrings.FalseValueText;  
var messageText = UiString.ResultMessageText;  
var messageString = String.Format("{0}:{1}", messageText, booleanText);

冗长的代码是有意的,这样你可以识别不同的部分。


-1

我知道你没有问这个问题,但是为了增加我的自恋声音,这就是如何从布尔值(0、1)中获取整数

using System;

class Program
{
    static void Main()
    {
        // Example bool is true
        bool t = true;

        // A
        // Convert bool to int
        int i = t ? 1 : 0;
        Console.WriteLine(i); // 1

        // Example bool is false
        bool f = false;

        // B
        // Convert bool to int
        int y = Convert.ToInt32(f);
        Console.WriteLine(y); // 0
    }
}

输出:

1

0


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