C# 中 bool 和 Boolean 类型有什么区别

问题描述 投票:0回答:15

C# 中

bool
Boolean
类型有什么区别?

c# types boolean
15个回答
436
投票

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


59
投票

我不相信有这样的人。

bool
只是
System.Boolean

的别名

28
投票

它们是一体的。

bool
只是
Boolean
的别名。


20
投票

没有区别 - bool 只是 System.Boolean 的别名。

http://msdn.microsoft.com/en-us/library/c8f5xwh7(VS.71).aspx


19
投票

我意识到这是很多年后的事了,但我在谷歌上偶然发现了这个页面,并提出了同样的问题。

目前 MSDN 页面上存在一个细微差别。

VS2005

注:

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

VS2010

注:

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


16
投票

它们是一样的。

bool
System.Boolean
的别名,无论哪种方式,编译器都会生成完全相同的 IL。

C# 程序员往往更喜欢

bool
。打字的次数更少,来自该语言家族的人感觉更自然。它还保证您获得实际的
System.Boolean
类型(否则可以在不同的命名空间中创建您自己的
Boolean
类型,并且类型解析可能会变得不明确)。

但是,如果您所在的商店里同时有很多 VB.Net 和 C#,那么您可能会更喜欢

Boolean
,因为它在这两个地方都适用,并且有助于简化 C# 和 VB.Net 之间的来回转换。


11
投票

正如已经说过的,它们是相同的。有两个,因为 bool 是 C# 关键字,Boolean 是 .Net 类。


10
投票

一个是另一个的别名。


7
投票

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


3
投票

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


2
投票

请注意,

Boolean
仅在您拥有
using System;
(通常但不一定包含在内)时才有效(除非您将其写为
System.Boolean
)。
bool
不需要
using System;


2
投票

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

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


1
投票

没有实际的区别,除非你得到类型字符串。 当您使用反射或 GetType() 时,您会得到 {名称=“布尔”全名=“System.Boolean”} 对于两者。


-1
投票

bool 是布尔值的别名。别名的作用是在编译代码之前将一个文本字符串替换为另一个文本字符串(如 notepad++ 中的搜索/替换所有)。使用其中之一在运行时不会产生任何影响。

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


-2
投票

也许 bool 比 Boolean 稍微“轻”一些;有趣的是,改变这个:

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

...对此:

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

...导致我的cs文件中长出了一个“using System;”将类型改回“bool”会导致 using 子句的头发变灰。

(Visual Studio 2010,WebAPI 项目)

© www.soinside.com 2019 - 2024. All rights reserved.