C#中的布尔类型和布尔类型有什么区别


Answers:


382

bool是的别名,System.Boolean就像int是的别名System.Int32。在此处查看别名的完整列表:内置类型表(C#参考)


5
从上面的链接中,微软说C#类型关键字及其别名是可互换的,但是为什么我们需要别名,从我的角度来看,布尔值比bool更有意义,而int32则比int更有意义,然后为什么要别名???
阿西姆·塞贾德

6
@asim:懒惰?它减少了键入,并避免了导入System的需要。就个人而言,我更喜欢别名。键入“ int”比键入“ Int32”要快得多。
肯特·布加亚特

8
@asmin:这是C的东西。int,float等是C和C ++程序员熟悉的关键字,因此Microsoft决定使用这些别名以保持一致性。
迈克·张伯伦

42
@Mikey我非常确定Java决定使用这些别名来保持一致性,而Microsoft决定使用Java来保持一致性... :-)
最长

19
@MaxWell在Java中,boolean并且Boolean是不一样的东西。一种是原始数据类型,另一种是对象。
Rosdi Kasim 2013年

48

我不相信有一个。

bool 只是它的别名 System.Boolean




15

我知道这是很多年后的事,但我在Google的同一页面上偶然遇到了同样的问题。

到目前为止,MSDN页面上只有一个细微的差别。

VS2005

注意:

如果需要布尔值也可以为null的布尔变量,请使用bool。有关更多信息,请参见可空类型(C#编程指南)。

VS2010

注意:

如果需要布尔值也可以为null的布尔变量,请使用bool?。有关更多信息,请参见可空类型(C#编程指南)。


2
这让我感到震惊-这似乎是文档中的错误。我首先看到了VS2005页面(对我来说,它在Google排名中排名更高!),并认为它暗示bool可以包含null,但Boolean不能包含null 。即使从较旧的文档到较新的文档都有链接,但我没有足够详尽地阅读较新的文档以注意到唯一的?区别。
Logan Pickup

1
很抱歉,但是那是错误的,您无法将bool或Bolean转换为null,因为它们是可为null的类型
Timothy Macharia 2016年

13

他们是一样的。布尔值有助于简化C#和VB.Net之间的来回转换。大多数C#程序员倾向于使用'bool',但是如果您在VB.Net和C#都很多的商店中,则您可能更喜欢Boolean,因为它在两个地方都可以使用。


10

如前所述,它们是相同的。有两个原因,因为布尔是C#关键字,布尔是.Net类。


那么bool跨平台兼容性会更好吗?
哔哔


5

bool是布尔类的别名。在声明变量时使用别名,在类上调用方法时使用类名。


8
出于兴趣-为什么同时使用两者?我主张使用其中一个。要么使用别名,要么不使用别名,否则代码看起来混乱且不一致。
肯特·布加亚特

2
当您不同时使用两者时,我认为它看起来很混乱。访问静态方法时,请使用别名声明数据类型,并使用实际的类名:string x = String.Format(“ Today is:{0}”,DateTime.Now);
Scott Dorman's

1
所以你会做:int i = Int32.Parse(...); ?我对此有两个问题。首先,VS默认情况下会突出显示不同的内容(我知道您可以更改此设置,但大多数开发人员仅使用默认语法突出显示)。其次,搜索比较困难,尤其是对于long(long / Int64)。
肯特·布加亚特

4
是的,那是应该完成的确切方法。int不是类名,您不应在其上调用方法。另一方面,它是内置类型,并定义Int32 i; 太冗长而不自然。
AviD

5
混合使用别名和类名只会增加代码清晰度。挑选一个并坚持下去,恕我直言
Arne Claassen

2

它们是相同的,Bool只是System.Boolean的缩写。当您使用VB.net程序员时,请使用布尔值,因为它可以同时使用C#和Vb


1

请注意,Boolean只有在您拥有using System;(通常但不一定包括)的情况下,它才有效(除非您将其写为System.Boolean)。 bool不需要using System;


0

bool是原始类型,意味着值(在这种情况下为true / false)直接存储在变量中。布尔值是一个对象。布尔类型的变量存储对布尔对象的引用。唯一真正的区别是存储。一个对象将总是比原始类型占用更多的内存,但是实际上,将所有布尔值更改为bool不会对内存使用产生任何明显的影响。

我错了; 这就是它在带有boolean和Boolean的java中的工作方式。在C#中,bool和Boolean都是引用类型。它们都直接将其值存储在变量中,它们都不能为null,并且都需要使用“ convertTO”方法将其值存储在另一种类型(例如int)中。仅在需要调用布尔类中定义的静态函数时才使用哪一个。


boolBoolean不是两个不同的类型,一种类型是不是引用类型,你可以调用一个静态方法一个使用两种标识类型,你不这样做,其实需要调用一个ConvertTo方法将其转换为另一种类型。
Servy

2
boolBoolean都是引用类型”是不正确的。单词boolBoolean都引用相同的类型,并且该类型是值类型,而不是引用类型。
Tanner Swett

谢谢,我正在尝试检查C#在此字段中是否与java相同。您的回答是唯一将其与Java进行比较的方法(即使可能不是故意的)。:)
bvdb

-1

bool是布尔值的别名。别名的作用是在编译代码之前,将一个文本字符串替换为另一个文本字符串(例如notepad ++中的search / replace-all)。在运行时使用另一项无效。

在大多数其他语言中,一种是原始类型,另一种是对象类型(C#行话中的值类型和引用类型)。C#不允许您在两者之间进行选择。当您要调用在Boolean类中定义的静态方法时,它会自动将Boolean视为引用类型。如果创建新的布尔变量,它将自动将其视为引用类型(除非您使用Activator.CreateInstance方法)。


布尔值是一种值类型,而不是引用类型。
2013年

-2

布尔值可能比布尔值“轻”些。有趣的是,更改此:

namespace DuckbillServerWebAPI.Models
{
    public class Expense
    {
        . . .
        public bool CanUseOnItems { get; set; }
    }
}

...对此:

namespace DuckbillServerWebAPI.Models
{
    public class Expense
    {
        . . .
        public Boolean CanUseOnItems { get; set; }
    }
}

...导致我的cs文件萌发了“使用系统”;将类型更改回“ bool”会导致using子句的头发变成灰色。

(Visual Studio 2010,WebAPI项目)


System.Boolean而不仅仅是Boolean。将using System;被显示出来,因为它允许Boolean进行适当解释System.Boolean。并不是真的那么轻,而是更不那么冗长。
纳特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.