Pergunta

Estou lendo um livro Net, e em um dos exemplos de código existe uma definição de classe com esse campo:

private DateTime? startdate

O que DateTime? média?

Foi útil?

Solução

Desde DateTime é um struct, não um class, você recebe um DateTime objeto , e não um referência , quando você declarar um campo ou variável desse tipo.

E, da mesma forma como um int não pode ser null, então este objeto DateTime nunca pode ser null, porque não é uma referência.

Adicionando as voltas ponto de interrogação de TI em uma tipo anulável , o que significa que qualquer é um objeto DateTime, ou é null.

DateTime? é açúcar sintático para Nullable<DateTime>, onde Nullable é em si um struct.

Outras dicas

É um DateTime anulável. ? depois de um tipo / estrutura primitiva indica que é a versão anulável.

DateTime é uma estrutura que nunca pode ser nulo. De MSDN :

O tipo de valor DateTime representa datas e horas com valores que variam de 0:00:00 meia-noite, 1º de janeiro de 0001 Anno Domini, ou AD (também conhecido como Era Comum, ou CE) através de 11:59:59, Dezembro 31, 9999 AD (CE)

DateTime? pode ser nulo no entanto.

A ? como um sufixo para um tipo de valor permite atribuições nulas que seriam othwerwise impossível.

http://msdn.microsoft.com/en-us/library/ b3h38hb0.aspx

Representa um objeto cujo subjacente Tipo é um tipo de valor que também pode ser atribuída uma referência nula.

Isto significa que você pode escrever algo como isto:

    DateTime? a = null;
    if (!a.HasValue)
    {
        a = DateTime.Now;
        if (a.HasValue)
        {
            Console.WriteLine(a.Value);
        }
    }

DateTime? é syntatically equivalente a Nullable .

É equivalente a Nullable . Você pode acrescentar "?" a qualquer tipo primitivo ou struct.

que basicamente dá-lhe um estado extra para primitivos. Pode ser um valor, ou pode ser nulo. Ele pode ser útil em situações onde um valor não precisam ser atribuído. Então, ao invés de usar por exemplo, datetime.min ou max, você pode atribuí-lo nulo para representar nenhum valor.

Como sabemos, DateTime é um struct significa DateTime é um tipo de valor, de modo a obter um objeto DateTime, não uma referência porque DateTime não é uma classe, quando você declarar um campo ou variável desse tipo você não pode inicial com nulo porque os tipos de valor não aceitam nulo. Da mesma forma como um int não pode ser nulo. assim DateTime objeto nunca será nula, porque não é uma referência.

Mas às vezes precisamos variável anulável ou campo de tipos de valor, que o tempo que usamos o ponto de interrogação para torná-los tipo anulável para que eles permitem nulo.

Por exemplo: -

DateTime? data = null;

int? intvalue = null;

No código acima, variável data é um objeto de DateTime ou é nulo. Mesmo para intvalue.

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