Qual è la differenza tra i tipi booleani e booleani in C #


Risposte:


382

boolè un alias System.Booleanproprio come intè un alias per System.Int32. Consulta un elenco completo di alias qui: Tabella dei tipi predefiniti (Riferimenti per C #) .


5
Dal link precedente microsoft afferma che le parole chiave di tipo C # e i loro alias sono intercambiabili Ma perché abbiamo bisogno di alias, dal mio punto di vista booleano è più significativo di bool e Int32 è più significativo di int quindi perché alias ???
Asim Sajjad,

6
@asim: pigrizia? Scrive meno ed evita la necessità di importare il sistema. Personalmente, preferisco gli alias. Digitare "int" è molto più veloce di digitare "Int32".
Kent Boogaart,

8
@asmin: è una cosa in C. int, float ecc. sono parole chiave familiari per i programmatori C e C ++, quindi Microsoft ha deciso di utilizzare questi alias per coerenza.
Mike Chamberlain,

42
@Mikey Sono abbastanza sicuro che Java abbia deciso di utilizzare questi alias per coerenza, e Microsoft ha deciso di utilizzare Java per coerenza ... :-)
max

19
@MaxWell In Java, booleane Booleannon è la stessa cosa. Uno è un tipo di dati primitivo e l'altro è un oggetto.
Rosdi Kasim,

48

Non credo ce ne sia uno.

bool è solo un alias per System.Boolean


22

Sono una cosa sola. bool è solo un alias per Boolean.



15

Mi rendo conto che è successo molti anni dopo, ma mi sono imbattuto in questa pagina da Google con la stessa domanda.

Al momento esiste una differenza minore sulla pagina MSDN.

VS2005

Nota:

Se hai bisogno di una variabile booleana che può anche avere un valore null, usa bool. Per ulteriori informazioni, consultare Tipi nullabili (Guida per programmatori C #).

VS2010

Nota:

Se hai bisogno di una variabile booleana che può anche avere un valore null, usa bool ?. Per ulteriori informazioni, consultare Tipi nullabili (Guida per programmatori C #).


2
Sono stato inciampato da questo - sembra essere un bug nella documentazione. Ho visto prima la pagina VS2005 (per me appare più alta nelle classifiche di Google!), E ho pensato che implicasse che boolpotesse contenere null, ma Booleannon poteva. Anche se esiste un collegamento tra la documentazione più vecchia e quella più recente, non ho letto la documentazione più recente abbastanza da notare la singola ?differenza.
Logan Pickup,

1
Mi dispiace ma è sbagliato, non puoi convertire bool o bolean in null perché sono tipi nullable
Timothy Macharia,

13

Loro sono la stessa cosa. Boolean aiuta a semplificare la conversione avanti e indietro tra C # e VB.Net. La maggior parte dei programmatori C # tende a preferire "bool", ma se ti trovi in ​​un negozio in cui ci sono molti VB.Net e C #, potresti preferire Boolean perché funziona in entrambi i posti.


10

Come è stato detto, sono gli stessi. Ce ne sono due perché bool è una parola chiave C # e Boolean una classe .Net.


Quindi Bool non sarebbe migliore per la compatibilità multipiattaforma?
Bip beep


5

bool è un alias per la classe booleana. Uso l'alias quando dichiaro una variabile e il nome della classe quando chiamo un metodo sulla classe.


8
Per interesse - perché dovresti usare entrambi? Sostengo l'utilizzo dell'uno o dell'altro. O utilizzare gli alias o no, altrimenti il ​​codice appare disordinato e incoerente.
Kent Boogaart,

2
Penso che sembra disordinato quando non si usano entrambi. Utilizzare l'alias per dichiarare il tipo di dati e utilizzare il nome della classe attuall quando si accede a metodi statici: string x = String.Format ("Oggi è: {0}", DateTime.Now);
Scott Dorman,

1
Quindi faresti: int i = Int32.Parse (...); ? Ho un paio di problemi con questo. In primo luogo, VS evidenzierà diversamente per impostazione predefinita (so che puoi cambiarlo, ma la maggior parte degli sviluppatori usa solo l'evidenziazione della sintassi predefinita). In secondo luogo, la ricerca è più difficile soprattutto con i long (long / Int64).
Kent Boogaart,

4
Sì, è esattamente così che dovrebbe essere fatto. int non è il nome della classe, non si dovrebbero chiamare metodi su di esso. D'altra parte, è il tipo incorporato e definisce Int32 i; è troppo prolisso e non naturale.
AviD,

5
la miscelazione di alias e nomi di classi non aggiunge nulla alla chiarezza del codice. Scegline uno e mantienilo, imho
Arne Claassen,

2

Sono uguali, Bool è solo System.Boolean abbreviato. Usa Boolean quando sei con un programmatore VB.net, poiché funziona con C # e Vb


1

Nota che Booleanfunzionerà solo se lo hai using System;(che di solito è, ma non necessariamente, incluso) (a meno che non lo scrivi come System.Boolean). boolnon ha bisognousing System;


0

bool è un tipo primitivo, nel senso che il valore (vero / falso in questo caso) è memorizzato direttamente nella variabile. Boolean è un oggetto. Una variabile di tipo booleano memorizza un riferimento a un oggetto booleano. L'unica vera differenza è l'archiviazione. Un oggetto occuperà sempre più memoria di un tipo primitivo, ma in realtà, la modifica di tutti i valori booleani in booleare non avrà alcun impatto evidente sull'uso della memoria.

Mi sbagliavo; è così che funziona in java con booleano e booleano. In C #, bool e Boolean sono entrambi tipi di riferimento. Entrambi memorizzano il loro valore direttamente nella variabile, entrambi non possono essere nulli ed entrambi richiedono un metodo "convertTO" per memorizzare i loro valori in un altro tipo (come int). Importa solo quale si utilizza se è necessario chiamare una funzione statica definita all'interno della classe booleana.


boole Booleannon sono di due tipi diversi, che un tipo non è un tipo di riferimento, è possibile chiamare un metodo statico su quel un tipo utilizzando identificatore, e non lo fai, infatti, bisogno di chiamare un ConvertTometodo per convertirlo in un altro tipo.
Servito il

2
Non è corretto " boole Booleansono entrambi tipi di riferimento". Le parole booled Booleanentrambe si riferiscono allo stesso tipo, e quel tipo è un tipo di valore, non un tipo di riferimento.
Tanner Swett,

Grazie, stavo cercando di verificare se C # si comportava allo stesso modo di Java in questo campo. La tua risposta è l'unica che la confronta con Java (anche se forse non intenzionalmente). :)
bvdb

-1

bool è un alias per Boolean. Quello che fanno gli alias è sostituire una stringa di testo con un'altra (come cerca / sostituisci tutto in notepad ++), appena prima che il codice venga compilato. L'uso l'uno sull'altro non ha alcun effetto in fase di esecuzione.

Nella maggior parte degli altri linguaggi, uno sarebbe un tipo primitivo e l'altro sarebbe un tipo di oggetto (tipo di valore e tipo di riferimento in gergo C #). C # non ti dà la possibilità di scegliere tra i due. Quando si desidera chiamare un metodo statico definito nella classe booleana, considera automaticamente il valore booleano come tipo di riferimento. Se si crea una nuova variabile booleana, la tratta automaticamente come un tipo di riferimento (a meno che non si usi il metodo Activator.CreateInstance).


Booleano è un tipo di valore, non un tipo di riferimento.
Servizio

-2

Forse il bool è un po 'più "leggero" del booleano; È interessante notare che cambiando questo:

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

...a questa:

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

... ha fatto sì che il mio file cs emettesse un "using System;" Cambiando il tipo in "bool", i capelli della clausola using diventano grigi.

(Visual Studio 2010, progetto WebAPI)


È System.Booleanpiuttosto che solo Boolean. La using System;stava rivelando perché ha permesso Booleandi essere correttamente interpretata come System.Boolean. Non molto più leggero, ma solo meno dettagliato.
Nat
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.