C#のブール型とブール型の違いは何ですか


回答:


382

boolのエイリアスとSystem.Boolean同じようintに、のエイリアスですSystem.Int32。エイリアスの完全なリストについては、こちらをご覧ください:組み込み型テーブル(C#リファレンス)


5
上記のリンクから、MicrosoftはC#タイプのキーワードとそのエイリアスは交換可能であると述べていますが、なぜエイリアスが必要なのか、私の観点からはブールはブールよりも意味があり、Int32はintよりも意味があり、なぜエイリアスですか?
Asim Sajjad

6
@asim:怠惰?入力が少なく、システムをインポートする必要がありません。個人的には、私はエイリアスを好みます。「int」と入力すると、「Int32」と入力するよりもはるかに高速です。
ケントブーガート

8
@asmin:Cのものです。int、floatなどはCおよびC ++プログラマにとっておなじみのキーワードなので、Microsoftは一貫性のためにこれらのエイリアスを使用することを決定しました。
Mike Chamberlain

42
@Mikey Javaが一貫性のためにこれらのエイリアスを使用することを決定し、Microsoftが一貫性のためにJavaを使用することを決定したと確信しています... :-)
max

19
でJavaを@MaxWell、booleanそしてBoolean同じものではありません。1つはプリミティブデータ型で、もう1つはオブジェクトです。
Rosdi Kasim 2013

48

あるとは思わない。

bool の単なるエイリアスです System.Boolean


22

同じものです。boolはブール値の単なるエイリアスです。



15

これは何年も後のことだと思いますが、同じページでgoogleからこのページに出くわしました。

現在、MSDNページには1つの小さな違いがあります。

VS2005

注意:

nullの値も持つことができるブール変数が必要な場合は、boolを使用します。詳細については、「null許容型(C#プログラミングガイド)」を参照してください。

VS2010

注意:

nullの値も持つことができるブール変数が必要な場合は、bool?を使用します。詳細については、「null許容型(C#プログラミングガイド)」を参照してください。


2
私はこれによってつまずきました-それはドキュメントのバグのようです。私は最初にVS2005ページ(Googleランキングで上位に表示されます!)を確認し、boolnullを含めることができるが、含めるBooleanことができないことを暗示すると考えました。古いドキュメントから新しいドキュメントへのリンクがありますが、1つの?違いに気付くほど十分に新しいドキュメントを読みませんでした。
ローガンピックアップ

1
申し訳ありませんが、それは間違っています。ブール型またはブール型はnull許容型であるため、nullに変換できません
Timothy Macharia

13

彼らは同じです。ブール値は、C#とVB.Netの間の変換を単純化するのに役立ちます。ほとんどのC#プログラマーは「ブール」を好む傾向がありますが、VB.NetとC#の両方がたくさんある店にいる場合は、ブール値が両方の場所で機能するため、ブール値を好むかもしれません。


10

言われたように、彼らは同じです。boolはC#キーワードであり、ブール値は.Netクラスであるため、2つあります。


では、クロスプラットフォームの互換性にはboolの方が良いのではないでしょうか?
ビープビープ音


5

boolはBooleanクラスのエイリアスです。変数を宣言するときにエイリアスを使用し、クラスのメソッドを呼び出すときにクラス名を使用します。


8
興味がない-なぜ両方を使用するのですか?私はどちらか一方を使用することを推奨しています。エイリアスを使用するかしないかを選択します。そうしないと、コードが乱雑になり、一貫性がなくなります。
ケントブーガート2008

2
両方を使わないと面倒くさいと思います。データ型を宣言するにはエイリアスを使用し、静的メソッドにアクセスするときは実際のクラス名を使用します。string x = String.Format( "Today is:{0}"、DateTime.Now);
スコットドーマン

1
だからあなたはそうするでしょう:int i = Int32.Parse(...); ?私はそれにいくつか問題があります。まず、VSはデフォルトで別の方法で強調表示します(私はこれを変更できることを知っていますが、ほとんどの開発者はデフォルトの構文強調表示を使用します)。次に、特にlong(long / Int64)では検索が難しくなります。
ケントブーガート2008

4
はい、それはそれが行われるべき正確な方法です。intはクラス名ではないので、メソッドを呼び出すべきではありません。一方、それは組み込み型であり、Int32 iを定義しています。冗長すぎて自然ではありません。
AviD 2008

5
エイリアスとクラス名を混在させても、コードの明快さに何も追加されません。1つを選んでそれを守ってください、imho
Arne Claassen

2

それらは同じで、BoolはSystem.Booleanを短縮したものです。C#とVbの両方で機能するため、VB.netプログラマを使用している場合はブール値を使用します。


1

Booleanあなたが持っている場合にのみ機能することに注意してくださいusing System;(通常は含まれていますが、含まれているわけではありません)(それをと書いていない限りSystem.Booleanbool必要ないusing System;


0

boolはプリミティブ型です。つまり、値(この場合はtrue / false)は変数に直接格納されます。ブール値はオブジェクトです。ブール型の変数は、ブールオブジェクトへの参照を格納します。唯一の本当の違いはストレージです。オブジェクトは常にプリミティブ型よりも多くのメモリを消費しますが、実際には、すべてのブール値をboolに変更しても、メモリ使用量に目立った影響はありません。

私は間違っていた; これが、ブール値とブール値を使用してJavaで機能する方法です。C#では、boolとBooleanはどちらも参照型です。どちらも変数に直接値を格納します。両方をnullにすることはできません。また、値を別の型(intなど)に格納するには「convertTO」メソッドが必要です。ブールクラス内で定義された静的関数を呼び出す必要がある場合にのみ、どれを使用するかが重要です。


boolBoolean2つの異なるタイプではありません。1つのタイプは参照タイプではなく、どちらかの識別子を使用してその1つのタイプの静的メソッドを呼び出すことができ、実際にConvertToメソッドを呼び出して別のタイプに変換する必要はありません。
16

2
boolおよびBoolean両方が参照型である」というのは正しくありません。単語boolBooleanその両方が同じ型を参照しており、その型は参照型ではなく値型です。
Tanner Swett、2017年

おかげで、このフィールドでC#がjavaと同じように機能するかどうかを確認しようとしました。あなたが答えるのは、それをjavaと比較する唯一の方法です(たとえ故意ではないとしても)。:)
bvdb 2017

-1

boolはBooleanのエイリアスです。エイリアスが行うことは、コードがコンパイルされる直前に、テキストの文字列を別の文字列(notepad ++のsearch / replace-allなど)に置き換えることです。どちらを使用しても、実行時には効果がありません。

他のほとんどの言語では、1つはプリミティブ型であり、もう1つはオブジェクト型(C#専門用語の値型と参照型)です。C#では、この2つを選択することはできません。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」が発生した タイプを「ブール」に戻すと、using句の髪が灰色に変わりました。

(Visual Studio 2010、WebAPIプロジェクト)


それSystem.BooleanだけではありませんBooleanusing System;それが許可されているため、最大示したBoolean適切として解釈されるようにSystem.Boolean。それほど冗長ではなく、それほど軽量ではありません。
Nat
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.