C# - Fundamentos : Definindo DateTime como Null
Na série C# Fundamentos vou abordar os conceitos básicos da linguagem C#. Hoje veremos como definir objetos do tipo DateTime como Null. |
É possível definir um objeto DateTime para null em C# ?
Quando um
tipo pode ser atribuído com um null ele é chamado de anulável, isso significa
que o tipo não tem valor. Todos os tipos de referência, como string, são
anuláveis por padrão enquanto que todos os tipos por valor, como int, double,
etc., não são anuláveis.
Assim concluímos que a resposta a essa
pergunta será: Não, porque DateTime é um tipo de
valor.
Assim, DateTime é um Tipo de Valor como int,
double etc., e portanto, não há como atribuir um valor nulo ao um objeto
DateTime.
Atribuindo null a um objeto DateTime
Acabei de escrever que não podemos atribuir um valor null a um objeto do tipo DateTime, mas podemos contornar esse problema da seguinte forma: duas maneiras de contornar esse problema:
Os nullabe Types ou Tipos Anuláveis permitem que você crie um tipo por valor que pode ser marcado como válido ou inválido de forma que você tenha certeza que a variável seja válida antes de ser usada.Tipos de valores regulares são chamados de tipos não anuláveis.
Por
padrão DateTime não é anulável porque é um tipo de valor, usando o operador
nullable introduzido no C# 2.0 , podemos tornar um objeto
DateTime um nullable type.
Fazemo isso usando um ponto de interrogação (?) após o tipo ou usando o estilo
genérico Nullable<T>:
Nullable<DateTime> DataNascimento = null;
|
Obs: Tipos anulável são instâncias da struct System.Nullable .
Usando esse recurso podemos tratar os objetos DateTime como mostra o exemplo abaixo:
using System;
namespace CSharp_Erros1
{
class Program
{
static void Main(string[] args)
{
// Declara uma instância de DateTime nullable e atribui um null
// A seguir altera o valor de DateTime e usa o método Teste
DateTime ? valor = null;
Teste(valor);
valor = DateTime.Now;
Teste(valor);
valor = DateTime.Now.AddDays(1);
Teste(valor);
// Podemos usar método GetValueOrDefault com null
valor = null;
Console.WriteLine(valor.GetValueOrDefault());
Console.ReadLine();
}
static void Teste(DateTime? valor)
{
// Usa a propriedade HasValue
// Se não existir um valor imprime zero(0)
if (valor.HasValue)
Console.WriteLine(valor.Value);
else
Console.WriteLine(0);
}
}
}
|
-O primeiro valor será zero pois o HasValue para null vai ser false -O segundo valor refere-se ao valor DateTime.Now atribuido -O terceiro valor refere-se ao valor atribuído por DateTime.Now.AddDays(1) -O quarto valor refere-se ao retorno de GetValueOrDefault() que retorna DateTime.MinValue para um valor null. |
No exemplo temos dois métodos :
A
variável "DateTime?" é declarada primeiro no corpo do método Main
e passada como um parâmetro para o método de Teste().
A seguir atribuimos valores diferentes à variável "DateTime?"
:
valor = DateTime.Now;
valor = DateTime.Now.AddDays(1);
Além
disso usamo o método GetValueOrDefault que retornará um
DateTime.MinValue para um DateTime nulo.
No método Teste()
estamos recebendo um parâmetro do tipo DateTime anulável e usando a propriedade
HasValue que esta disponível em qualquer tipo anulável.
Ela vai retornar true se o tipo anulável for não nulo e false se o campo nulo no tipo anulável estiver ativado.
E estamos conversados...
'Disse-lhe Jesus: Não te hei dito que,
se creres, verás a glória de Deus? '
João 11:40
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
C# - Formatação de data e hora para uma cultura específica - Macoratti