อะไรคือความแตกต่างระหว่างประเภทบูลและบูลีนใน C #


คำตอบ:


382

boolเป็นนามแฝงสำหรับSystem.Booleanเช่นเดียวกับที่เป็นนามแฝงสำหรับint System.Int32ดูรายการเต็มรูปแบบของนามแฝงที่นี่: Built-In ตารางประเภท (C # อ้างอิง)


5
จากลิงก์ด้านบนไมโครซอฟท์กล่าวว่าคำสำคัญประเภท C # และชื่อแทนของพวกเขานั้นใช้แทนกันได้ แต่ทำไมเราต้องการนามแฝงจากมุมมองของฉันบูลีนมีความหมายมากกว่าบูลและ Int32 นั้นมีความหมายมากกว่า
Asim Sajjad

6
@asim: ความเกียจคร้าน? มันพิมพ์น้อยลงและหลีกเลี่ยงความต้องการที่จะนำเข้าระบบ ส่วนตัวฉันชอบนามแฝง การพิมพ์ "int" เร็วกว่าการพิมพ์ "Int32"
Kent Boogaart

8
@asmin: มันเป็นสิ่ง C int, float ฯลฯ เป็นคำหลักที่คุ้นเคยสำหรับโปรแกรมเมอร์ C และ C ++ ดังนั้น Microsoft จึงตัดสินใจใช้นามแฝงเหล่านี้เพื่อความมั่นคง
Mike Chamberlain

42
@ Mikey ฉันค่อนข้างแน่ใจว่า Java ตัดสินใจใช้ชื่อแทนเหล่านี้เพื่อความมั่นคงและ Microsoft ตัดสินใจใช้ Java เพื่อความมั่นคง ... :-)
สูงสุด

19
@ MaxWell ใน Java booleanและBooleanไม่ใช่สิ่งเดียวกัน หนึ่งคือชนิดข้อมูลดั้งเดิมและอื่น ๆ เป็นวัตถุ
Rosdi Kasim

48

ฉันไม่เชื่อว่ามีอย่างใดอย่างหนึ่ง

bool เป็นเพียงนามแฝงสำหรับ System.Boolean


22

พวกเขาเป็นหนึ่งเดียวกัน บูลเป็นเพียงนามแฝงสำหรับบูลีน



15

ฉันรู้ว่านี่เป็นเวลาหลายปีต่อมา แต่ฉันเจอหน้าเว็บนี้จาก google ด้วยคำถามเดียวกัน

มีความแตกต่างเล็กน้อยหนึ่งอย่างในหน้า MSDN ณ ตอนนี้

VS2005

บันทึก:

หากคุณต้องการตัวแปรบูลีนที่สามารถมีค่าเป็น null ได้ให้ใช้บูล สำหรับข้อมูลเพิ่มเติมให้ดูที่ประเภทที่ใช้งานได้ (คู่มือการเขียนโปรแกรม C #)

VS2010

บันทึก:

หากคุณต้องการตัวแปรบูลีนที่สามารถมีค่าเป็น null ได้ให้ใช้บูล? สำหรับข้อมูลเพิ่มเติมให้ดูที่ประเภทที่ใช้งานได้ (คู่มือการเขียนโปรแกรม C #)


2
ฉันถูกสะดุดโดยสิ่งนี้ - ดูเหมือนว่าจะเป็นข้อผิดพลาดในเอกสาร ฉันเห็นหน้า VS2005 เป็นครั้งแรก (ปรากฏในอันดับที่สูงกว่าของ Google สำหรับฉัน!) และคิดว่ามันส่อให้เห็นว่าboolอาจมีค่าว่าง แต่Booleanไม่สามารถทำได้ แม้ว่าจะมีลิงก์จากเอกสารเก่าไปยังเอกสารใหม่กว่าฉันไม่ได้อ่านเอกสารใหม่กว่าอย่างละเอียดเพียงพอที่จะสังเกตเห็นความ?แตกต่างเพียงอย่างเดียว
รถกระบะ Logan

1
ขออภัยที่ไม่ถูกต้องคุณไม่สามารถแปลงบูลหรือ Bolean เป็นโมฆะได้เนื่องจากเป็นประเภทโมฆะ
ทิโมธี Macharia

13

พวกเขาก็เหมือน ๆ กัน. บูลีนช่วยให้การแปลงไปมาระหว่าง C # และ VB.Net ง่ายขึ้น โปรแกรมเมอร์ C # ส่วนใหญ่มักจะชอบ 'บูล' แต่ถ้าคุณอยู่ในร้านที่มีทั้ง VB.Net และ C # มากคุณอาจชอบบูลีนเพราะมันทำงานได้ทั้งสองที่


10

ดังที่ได้กล่าวไว้พวกเขาเหมือนกัน มีสองเพราะบูลเป็นคำหลัก C # และบูลีนระดับ. Net


ดังนั้นจะไม่บูลดีกว่าสำหรับความเข้ากันได้ข้ามแพลตฟอร์มหรือไม่
ปี๊บปี๊บ


5

บูลเป็นนามแฝงสำหรับคลาสบูลีน ฉันใช้นามแฝงเมื่อประกาศตัวแปรและชื่อชั้นเมื่อเรียกวิธีการในชั้นเรียน


8
ไม่สนใจ - คุณจะใช้ทั้งสองทำไม ฉันแนะนำให้ใช้อย่างใดอย่างหนึ่ง ใช้นามแฝงหรือไม่ก็ได้มิฉะนั้นรหัสดูยุ่งและไม่สอดคล้องกัน
Kent Boogaart

2
ฉันคิดว่ามันดูรกเมื่อคุณไม่ได้ใช้ทั้งคู่ ใช้นามแฝงสำหรับการประกาศประเภทข้อมูลและใช้ชื่อคลาส actuall เมื่อเข้าถึงวิธีคงที่: string x = String.Format ("วันนี้คือ: {0}", DateTime.Now);
Scott Dorman

1
ดังนั้นคุณต้องทำ: int i = Int32.Parse (... ); ? ฉันมีปัญหาสองสามข้อกับสิ่งนั้น ประการแรก VS จะเน้นที่แตกต่างกันไปตามค่าเริ่มต้น (ฉันรู้ว่าคุณสามารถเปลี่ยนแปลงสิ่งนี้ได้ แต่ส่วนใหญ่ devs เพียงใช้การเน้นไวยากรณ์เริ่มต้น) ประการที่สองการค้นหายากขึ้นโดยเฉพาะกับ longs (long / Int64)
Kent Boogaart

4
ใช่ว่าเป็นวิธีที่แน่นอนที่ควรทำ int ไม่ใช่ชื่อคลาสคุณไม่ควรเรียกใช้เมธอด ในทางกลับกันมันเป็นชนิด builtin และการกำหนด Int32 i; verbose เกินไปและไม่เป็นธรรมชาติ
AviD

5
การผสมสมนามและชื่อคลาสไม่ได้เพิ่มความชัดเจนของโค้ดเลย เลือกอย่างใดอย่างหนึ่งและติดกับมัน imho
Arne Claassen

2

พวกเขาเหมือนกัน Bool เป็นเพียง System.Boolean สั้นลง ใช้ Boolean เมื่อคุณอยู่กับโปรแกรมเมอร์ VB.net เนื่องจากสามารถใช้งานได้กับทั้ง C # และ Vb


1

โปรดทราบว่าคุณBooleanจะใช้งานได้ก็ต่อเมื่อคุณมีusing System;(ซึ่งโดยปกติแล้วจะไม่รวมอยู่ด้วย) (เว้นแต่คุณจะเขียนเป็นSystem.Boolean) boolไม่ต้องการusing System;


0

บูลเป็นประเภทดั้งเดิมหมายความว่าค่า (จริง / เท็จในกรณีนี้) จะถูกเก็บไว้ในตัวแปรโดยตรง บูลีนเป็นวัตถุ ตัวแปรประเภทบูลีนเก็บการอ้างอิงไปยังวัตถุบูลีน ข้อแตกต่างที่แท้จริงคือการจัดเก็บ วัตถุจะใช้หน่วยความจำมากกว่าประเภทดั้งเดิมเสมอ แต่ในความเป็นจริงการเปลี่ยนค่าบูลีนทั้งหมดของคุณเป็นบูลจะไม่ส่งผลกระทบใด ๆ ต่อการใช้หน่วยความจำ

ฉันผิดไป; นั่นคือวิธีการทำงานใน java ด้วยบูลีนและบูลีน ใน C #, บูลและบูลีนเป็นทั้งประเภทการอ้างอิง ทั้งคู่เก็บค่าโดยตรงในตัวแปรทั้งคู่ไม่สามารถเป็นโมฆะและทั้งคู่ต้องการเมธอด "convertTO" เพื่อเก็บค่าในประเภทอื่น (เช่น int) มันสำคัญเฉพาะกับเรื่องที่คุณใช้ถ้าคุณต้องการเรียกใช้ฟังก์ชันสแตติกที่กำหนดไว้ในคลาสบูลีน


boolและBooleanไม่ใช่ประเภทที่แตกต่างกันสองประเภทประเภทหนึ่งไม่ใช่ประเภทอ้างอิงคุณสามารถเรียกใช้วิธีการคงที่กับประเภทหนึ่งโดยใช้ตัวระบุอย่างใดอย่างหนึ่งและในความเป็นจริงคุณไม่จำเป็นต้องเรียกConvertToวิธีการแปลงเป็นประเภทอื่น
Servy

2
ไม่ถูกต้องว่า " boolและBooleanทั้งสองประเภทอ้างอิง" คำboolและBooleanทั้งคู่อ้างถึงประเภทเดียวกันและประเภทนั้นเป็นประเภทค่าไม่ใช่ประเภทอ้างอิง
แทนเนอร์ Swett

ขอบคุณฉันพยายามตรวจสอบว่า C # ทำหน้าที่เหมือนกับ java ในฟิลด์นี้หรือไม่ คุณตอบเป็นคนเดียวที่เปรียบเทียบกับจาวา (แม้ว่าอาจจะไม่เจตนา) :)
bvdb

-1

บูลเป็นนามแฝงสำหรับบูลีน นามแฝงใดที่ทำคือแทนที่ข้อความหนึ่งสตริงด้วยข้อความอื่น (เช่น search / replace-all ใน notepad ++) ก่อนที่จะคอมไพล์โค้ด การใช้รายการใดรายการหนึ่งจะไม่มีผลในขณะใช้งาน

ในภาษาอื่น ๆ ส่วนใหญ่หนึ่งจะเป็นประเภทดั้งเดิมและอื่น ๆ จะเป็นประเภทวัตถุ (ประเภทค่าและประเภทการอ้างอิงใน C # ศัพท์แสง) C # ไม่ได้ให้คุณเลือกระหว่างทั้งสอง เมื่อคุณต้องการเรียกเมธอดสแตติกที่กำหนดไว้ในคลาสบูลีนบูลีนจะถือว่าบูลีนเป็นประเภทอ้างอิงโดยอัตโนมัติ หากคุณสร้างตัวแปรบูลีนใหม่ตัวแปรนั้นจะถือว่าเป็นประเภทอ้างอิงโดยอัตโนมัติ (ยกเว้นว่าคุณใช้วิธี Activator.CreateInstance)


บูลีนเป็นประเภทค่าไม่ใช่ประเภทอ้างอิง
Servy

-2

บางทีบูลคือ "เบากว่า" ตาดกว่าบูลีน ที่น่าสนใจคือการเปลี่ยนสิ่งนี้:

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

...สำหรับสิ่งนี้:

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

... ทำให้ไฟล์ cs ของฉันแตก "โดยใช้ระบบ" การเปลี่ยนประเภทกลับเป็น "บูล" ทำให้ผมของประโยคที่ใช้เปลี่ยนเป็นสีเทา

(Visual Studio 2010, โครงการ WebAPI)


มันเป็นมากกว่าแค่System.Boolean ถูกแสดงขึ้นเพราะได้รับอนุญาตจะถูกตีความอย่างถูกต้องตาม ไม่เบาจริง ๆ มากเท่า verbose น้อยกว่า Booleanusing System;BooleanSystem.Boolean
Nat
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.