Pergunta

Em C# estão os tipos primitivos anuláveis ​​(ou seja, bool?) apenas apelidos para seus correspondentes Nullable<T> tipo ou há diferença entre os dois?

Foi útil?

Solução

Se você olhar para o IL usando Ildasmo, você descobrirá que ambos são compilados para Nullable<bool>.

Outras dicas

Não há diferença entre bool? b = null e Nullable<bool> b = null.O ? é apenas açúcar de sintaxe do compilador C #.

Para acessar o valor do bool?você precisa fazer o seguinte:

bool? myValue = true;
bool hasValue = false;

if (myValue.HasValue && myValue.Value)
{
  hasValue = true;
}

Observe que você não pode simplesmente fazer:

if (myValue)
{
  hasValue = true;
}

Estou surpreso que ninguém tenha acessado a fonte (a especificação C#) ainda.De §4.1.10 Tipos anuláveis:

Um tipo anulável é escrito T?, onde T é o tipo subjacente.Essa sintaxe é uma abreviação de System.Nullable<T> e os dois formulários podem ser usados ​​de forma intercambiável.

Então, não, não há diferença entre as duas formas.(Supondo que você não tenha nenhum outro tipo chamado Nullable<T> em qualquer um dos namespaces que você usa.)

A Nullable<T> é uma estrutura que consiste em um T e um sinalizador de bit que indica se o T é válido ou não.A Nullable<bool> tem três valores possíveis:verdadeiro, falso e nulo.

Editar: Ah, perdi o fato de que o ponto de interrogação após "bool" era na verdade parte do nome do tipo e não um indicador de que você estava fazendo uma pergunta :).A resposta à sua pergunta, então, é "sim, o C# bool? é apenas um apelido para Nullable<bool>".

A bool é um tipo de valor, portanto não pode conter um valor NULL.Se você agrupar qualquer tipo de valor com Nullable<>, isso lhe dará essa habilidade.Além disso, os métodos de acesso ao valor mudam por propriedades adicionais HasValue e Value.

Mas para a pergunta: Nullable<bool> e bool? são apelidos.

Não, não há diferença.Resumindo:

System.Boolean -> valores válidos:verdadeiro falso

bool -> alias para System.Boolean

Anulável<bool> -> valores válidos:verdadeiro, falso, nulo

bool?-> alias para Anulável<bool>

Espero que isto ajude.

Primitivas nulas são apenas primitivas regulares envolvidas em Nullable.Qualquer aparência em contrário é apenas o compilador e o açúcar sintático.

Não há diferença.Dê uma olhada aqui: http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx

"A sintaxe T?é uma abreviação de Nullable, onde T é um tipo de valor.As duas formas são intercambiáveis."

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top