Microsoft Health Common User Interface (CUI)

Microsoft Health CUI Demonstrator


O Microsoft Health CUI Patient Journey Demonstrator é um veículo usado pela Microsoft para demonstrar o poder do Silverlight e WPF para criar interfaces ricas e proporcionar uma excelente experiência visual para o usuário, especialmente na área da saúde.


 


O Microsoft Health CUI Patient Journey Demonstrator oferece diversos exemplos de implementação de Rich Interface Applications utilizando a plataforma Microsoft.


 


É o showcase da Microsoft para novas idéias, experiências e artefatos com o propósito de aprender e refletir sobre o futuro do desenvolvimento do Microsoft Health CUI.


 


Este exemplo pode ser muito útil como referência para desenvolvimento de aplicações ricas. Vale a pena visitar. Acesse o link http://www.mscui.net/PatientJourneyDemonstrator/.

Windows Azure será lançado no fim do ano, afirma Steve Ballmer

A Microsoft planeja lançar o Windows Azure, versão do sistema operacional para cloud computing, antes do final do ano, anunciou o Chief Executive Officer (CEO) da empresa, Steve Ballmer, na terça-feira (24/02).

 

Em comentários feitos para analistas de Wall Street sobre o status financeiro da Microsoft, Ballmer disse que a empresa terá “a habilidade de chegar ao mercado” com o Azure no final deste ano durante a Professional Developers Conference (PDC), em novembro.

 

O Azure vai concorrer com o Elastic Compute Cloud (EC2), da Amazon, como um ambiente de hospedagem ‘escalável’ no qual os desenvolvedores podem criar e hospedar suas aplicações.

 

Os desenvolvedores podem usar as ferramentas já conhecidas da linguagem .NET para criar aplicações no Windows Azure, que usa a tecnologia de virtualização da Microsoft para separar as aplicações rodando em diferentes sistemas operacionais.

 

O Azure foi apresentado pela Microsoft em outubro do ano passado, durante a PDC 2008, mas a companhia ainda não havia anunciado uma data para lançar o serviço.

 

Na semana passada, Doug Hauger, gerente geral de marketing e estratégias de negócios da Microsoft para serviços de cloud computing, disse a um grupo de investidores que a empresa divulgaria em breve os valores cobrados pelo Azure.

 

Hauger disse que os clientes também poderão escolher o modelo “pay-as-you-go”, no Azure – que, segundo ele, será mais barato do que a média cobrada pelo mercado -, mas terão descontos se optarem pelo modelo pré-pago.

 

 

Elizabeth Montalbano, editora do IDG News Service, de Nova York

 

 

Na semana passada, Doug Hauger, gerente geral de marketing e estratégias de negócios da Microsoft para serviços de cloud computing, disse a um grupo de investidores que a empresa divulgaria em breve os valores cobrados pelo Azure.


 


Hauger disse que os clientes também poderão escolher o modelo “pay-as-you-go”, no Azure – que, segundo ele, será mais barato do que a média cobrada pelo mercado -, mas terão descontos se optarem pelo modelo pré-pago.


 


 


Elizabeth Montalbano, editora do IDG News Service, de Nova York

Nova IDE do Visual Studio 2010 criada com WPF

Durante o PDC2008 realizado em Novembro/2008 na cidade de Los Angeles, a Microsoft apresentou novos recursos do editor e designer de formulários criados com WPF e .NET Framework 4.0. Nesta semana, foram divulgadas as primeiras imagens da nova IDE do Visual Studio 2010 também construída com WPF. A Figura 1 mostra a nova Start Page.


 



VSTS2010 Start Page


Figura 1: Nova Start Page em WPF


 


 


A Microsoft concentrou seus esforços na redução da poluição visual com a remoção de linhas e gradientes excessivos da UX e na modernização da interface com a substituição dos traços 3D considerados ultrapassados. Outro ponto importante considerado foi o melhor aproveitamento dos espaços entre as diversas janelas da IDE, e a utilização de cores para facilitar a identificação visual de áreas distintas da IDE. Veja a Figura 2.




VSTS 2010 Nova IDE WPF


Figura 2: A nova IDE do VSTS2010


 


A próxima imagem (Figura 3) mostra o novo recurso de floating documents que permite que o desenvolvedor possa explorar o uso de dois monitores para criar seus formulários e codificar sua aplicação simultaneamente.


 



VSTS2010 IDE Floating Documents


Figura 3: Novo Recurso Floating Documents


 


 


O Editor de Código também tem novos recursos que facilitam a leitura e organização do código-fonte. Triângulos vazios posicionados na margem esquerda identificam seções de código que foram colapsadas, estas seções também mostram um sinal de reticências ao final da linha. As cores apresentadas na margem esquerda representam um indicador visual das alterações realizadas no código. Veja a Figura 4.


 



VSTS2010 Editor de Código


Figura 4: O Editor de Código


 


 


A nova janela New Project também foi atualizada para incluir o acesso e visualização de Templates Online e facilitar a navegação entre os Templates instalados no computador local. O recurso de Multi-targeting continua disponível nesta janela, incluindo o .NET Framework 4.0 (Figura 5).


 



VSTS2010 Janela New Project


Figura 5: Janela New Project


 


O Visual Studio possui um grande eco-sistema de extensões fornecidas por parceiros. No Visual Studio 2010 o desenvolvedor terá o acesso facilitado para localizar e instalar essas extensões com o novo Extension Manager (Figura 6).


 



VSTS2010 New Extension Manager


Figura 6: O Novo Extension Manager


 


Ainda não há definição quanto à data de lançamento ou mesmo do primeiro Beta público, mas já conseguimos ter uma idéia do que vem por aí na nova versão da melhor suíte de desenvolvimento disponível no mercado.

Microsoft revela nova versão do Visual Studio e da ferramenta .Net Framework

Companhia anuncia novidades para simplificar o gerenciamento do ciclo de desenvolvimento de software, revela detalhes das novas versões do Visual Studio 2010 e do .Net Framework 4.0


A Microsoft apresenta algumas das novidades que farão parte da próxima geração do Visual Studio 2010 e .Net Framework 4.0. Dessa forma, a companhia segue com o compromisso de oferecer a melhor experiência para os desenvolvedores acompanharem as tendências de mercado, como “computação na nuvem” (cloud computing), e disponibilizar uma solução segura e confiável para o desenvolvimento de aplicativos para as plataformas mais atuais.

Além do foco no desenvolvedor, a Microsoft consolida seu comprometimento em entregar para as empresas uma plataforma completa para todo o ciclo de vida de desenvolvimento de aplicativos por meio do ALM (Application Lifecycle Management). O Visual Studio 2010, cujo codinome é Rosario, oferecerá uma solução única que atende todas as pessoas envolvidas no processo de desenvolvimento de uma aplicação, retirando muitas das barreiras que evitam a integração entre equipes e diferentes tecnologias. “O objetivo é entregar para nossos clientes uma solução capaz de apoiar todos os envolvidos no processo de desenvolvimento de uma aplicação desde a análise de requisitos e arquitetura até a homologação, instalação e manutenção. Isso considerando que essa plataforma é interoperável com outras tecnologias usadas para desenvolvimento de software do mercado.”, destacou Carlos Zimmermann, gerente de produtos para desenvolvimento da Microsoft Brasil.


Democratizando o Gerenciamento de Ciclo de Vida de Aplicativos

Atualmente, grande parte do desenvolvimento de aplicativos está disperso ou dependente de diversas áreas nas empresas. Isso gera diversos desafios que podem impactar em perda de produtividade, controle e previsibilidade nos ciclos de desenvolvimento de um software. Com o Visual Studio 2010, a Microsoft dará um passo à frente na oferta de uma solução avançada que apoiará a equipe envolvida no processo de desenvolvimento para colaborar de forma efetiva e com alta qualidade.

Essa oferta inclui novos recursos que possibilitam que todos os colaboradores da equipe de software participem do ciclo de vida do produto. Arquitetos, analistas de sistemas, desenvolvedores, testadores e administradores de database (DBAs) entre outros, terão ferramentas específicas para trabalharem de forma integrada e produtiva. Entre os destaques da nova versão estão:

- Ferramentas de modelagem - O Visual Studio Team System Architecture Edition fornecerá um novo conjunto de ferramentas UML (Unified Modeling Language) na nova versão. Estas ferramentas, que permitem aos desenvolvedores visualizarem os produtos de seu trabalho em diagramas padronizados, ajudarão a preencher a lacuna entre modelos de alto nível e o código da aplicação, enfatizando os benefícios do uso de UML e soluções DSL (Digital Subscriber Line), voltadas à transmissão digital de dados. Adicionalmente, a edição “architecture” fornecerá ricas ferramentas que permitirão aos clientes entender melhor seus sistemas atuais, fornecendo capacidade de visualizar e integrar a infra-estrutura atual facilmente com novos sistemas na camada de modelagem.

- Maior eficiência por todo o ciclo de testes - A Microsoft investiu significativamente nos recursos de testes do Visual Studio 2010 e simplificou as ferramentas necessárias para a integração de testes por todo seu ciclo de vida de desenvolvimento. Ferramentas de testes generalistas poderosas e fáceis de usar que suportam planejamento de testes e gerenciamento de casos de teste, assim como ferramentas avançadas para testes manuais farão parte do Visual Studio Team System 2010.

- Melhorias significativas nos recursos de colaboração - A Microsoft também investiu nos recursos e na escalabilidade do Team Foundation Server (TFS), incluindo aprimoramentos que permitem às equipes configurarem e adotarem qualquer forma de processo de desenvolvimento. As equipes poderão rastrear o trabalho com mais facilidade. No sistema de gerenciamento de código fonte, o TFS oferece ferramentas de visualização para o rastreamento de alterações em desvios e no conjunto de produção. O Visual Studio 2010 também passará a incluir conjuntos baseados no fluxo de trabalho que detectam erros antes desses afetarem o restante da equipe ou, pior ainda, ingressar na produção. Por fim, os administradores contarão com uma implantação e gerenciamento de TFS significativamente mais simples.


Para maiores informações, acesse: http://www.microsoft.com/visualstudio/en-us/products/2010/default.mspx.

C# 3.0 – Auto Implemented Properties

Introdução


Frequentemente os métodos de acesso às propriedades de uma classe (get/set) têm uma implementação trivial, seguindo um modelo simples, onde o acessor get é responsável por retornar o valor armazenado num campo privado da classe e o acessor set tem o propósito de atribuir um novo valor ao campo.


 


O novo recurso Auto Implemented Properties, disponível no C# 3.0, oferece uma sintaxe mais concisa para implementar esse modelo, onde o compilador C# gera automaticamente os campos privados. O exemplo a seguir o ajudará a entender esse novo recurso e seu impacto no dia-a-dia do programador.


 


Utilizando a versão beta do Visual Studio 2008 (se você ainda não baixou, acesse o link http://msdn2.microsoft.com/en-us/vstudio/aa700831.aspx) crie um novo projeto utilizando o template Console Application, atribua o nome desejado para a Solução, eu utilizarei o nome CSNewFeatures.


 


Na janela Solution Explorer, abra o arquivo Program.cs, e adicione uma nova classe chamada Movie, como demonstra o código abaixo:


 


namespace CSNewFeatures


{


    public class Movie


    {


    }


   


    class Program


    {


        static void Main(string[] args)


        {


        }


    }


}


 


Na nova classe Movie, adicione duas propriedades (Título e Gênero). E modifique o método ToString() da seguinte forma:


 


public class Movie


{


    public string Titulo { get; set; }


    public string Genero { get; set; }


 


    public override string ToString()


    {


        return Titulo + “\t” + Genero;


    }


}


 


Modifique o método Main da classe Program para criarmos uma nova instância da classe Movie, veja o código:


 


static void Main(string[] args)


{


  Movie m = new Movie();


  m.Titulo = “Em busca da felicidade”;


  m.Genero = “Drama”;


  


  Console.WriteLine(m);


  Console.ReadLine();


}


 


Execute a aplicação (CTRL+F5) para visualizar o resultado. Pressione qualquer tecla para finalizar a aplicação console e retornar para o ambiente de desenvolvimento do Visual Studio 2008.


 


Este modelo de construção requer que a propriedade tenha os dois métodos de acesso (get/set). Contudo, podemos atribuir modificadores de acesso para uma construção mais elaborada. Por exemplo, considere que você queira acrescentar uma propriedade (Codigo) que seja somente leitura (ReadOnly), para isto bastaria acrescentar o modificador private junto ao acessor set. Veja o código abaixo:


 


public class Movie


{


    public int Codigo { get; private set; }


    public string Titulo { get; set; }


    public string Genero { get; set; }


 


    public override string ToString()


    {


        return Codigo + “\t” + Titulo + “\t” + Genero;


    }


}


 


Neste caso, a propriedade código seria implementada somente para leitura. Desta forma, temos que realizar duas modificações, a primeira será acrescentarmos um construtor na classe Movie. Este construtor terá um argumento do tipo inteiro que será atribuído à nova propriedade Código quando uma nova instância da classe for criada. Confira o código a seguir:


 


public class Movie


{


    public string Codigo { get; private set; }


    public string Titulo { get; set; }


    public string Genero { get; set; }


 


    public Movie(int iCodigo)


    {


        Codigo = iCodigo;


    }


 


    public override string ToString()


    {


        return Codigo + “\t” + Titulo + “\t” + Genero;


    }


}


 


A segunda modificação será feita no método Main da classe Program para instanciarmos corretamente a classe Movie:


 


static void Main(string[] args)


{


    Movie m = new Movie(1);


    m.Titulo = “Em busca da felicidade”;


    m.Genero = “Drama”;


  


    Console.WriteLine(m);


    Console.ReadLine();


}


 


Execute novamente a aplicação para observar o resultado.


 


Conclusão


O novo recurso Auto Implemented Properties do C# 3.0 reduz a quantidade de código necessária para implementarmos as propriedades das nossas classes e torna o código mais claro. Com esta melhoria, os desenvolvedores ganharão produtividade significante para executar uma tarefa que é tão comum em todas aplicações.


 

Criando Eventos Customizados no C#

Introdução


Necessidade comum no desenvolvimento de soluções Windows Forms é a criação de eventos personalizados. O desenvolvedor pode utilizar este recurso para gerenciar de forma mais eficiente o fluxo de execução do seu programa. Com eventos, podemos manter o usuário informado sobre o processamento executado pela aplicação e manter seu usuário informado é sem dúvida nenhuma uma boa prática. Os formulários e controles possuem eventos built-in que atendem as necessidades mais comuns das aplicações, contudo, a possibilidade de criarmos nossos próprios eventos nos permite melhorar a qualidade do software produzido.


 


Estrutura do Exemplo


O exemplo apresentado neste artigo foi elaborado sobre a seguinte estrutura:


  • Classe Base (frmBase.cs)
  • Formulário de Produtos (frmProdutos.cs)
  • Formulário MDI (mdiCadastro.cs)

A Classe Base implementa uma estrutura básica para operações CRUD. O aplicativo que consome esta classe utiliza o modelo tradicional de Multiple Document Interface (MDI). Assim, o formulário MDI implementado pela classe mdiCadastro.cs oferece as funcionalidades necessárias para manipular os métodos e eventos dos formulários filhos. No exemplo, temos um formulário de Produtos cujo método Salvar é invocado através da barra de ferramentas do formulário MDI. Implementamos um Evento Customizado (AoSalvar) para exibir uma mensagem logo após o botão Salvar da barra de ferramentas ser clicado pelo usuário.


 


 


Declarando Eventos e Atributos


A declaração de eventos é relativamente simples. Precisamos de um delegate (AoSalvarEventHandler), a própria declaração do evento (AoSalvar) e um método de apoio (RaiseAoSalvar) para disparar o evento quando desejado. O Quadro 1 apresenta o código necessário para esta implementação. Observe que a Linha 03 implementa os atributos Categoria e Descrição do evento customizado. Estas informações são apresentadas na Janela de Propriedades quando exibimos os eventos do formulário (Figura 1).


 


01: public delegate void AoSalvarEventHandler(object sender, EventArgs e);


02:


03: [Category("Bartender - CustomEvents"), Description("Ocorre sempre ...")]


04: public event AoSalvarEventHandler AoSalvar;


05:


06: public virtual void RaiseAoSalvar()


07: {


08:    AoSalvar(this, new EventArgs());


09: }


Quadro 1: Declarando Eventos e Atributos Customizados


  



Eventos Customizados


Figura 1 : Atribudos dos Eventos Customizados


 


Consumindo Eventos


O aplicativo utilizado no exemplo, consome o evento AoSalvar sempre que o usuário clica no botão Salvar da barra de ferramentas. O código deste botão é apresentado no Quadro 2, a linha em negrito destaca o método RaiseAposSalvar que dispara o evento imediatamente após o método SalvarRegistro ser executado. Neste fragmento de código, o objeto frmActiveChild corresponde ao formulário de Produtos instanciado pelo MDI.


 


……


case “Salvar”:


   if (this.ActiveMdiChild != null)


   {


      try


      {


         if (frmActiveChild.ValidarFormulario())


         {


            frmActiveChild.Validate();


            frmActiveChild.RaiseAoSalvar();


            frmActiveChild.SalvarRegistro();


            frmActiveChild.RaiseAposSalvar();


            frmActiveChild.Status = frmBase.FormStatus.Ocioso;


            AtualizarBarraFerramentas();


            frmActiveChild.DesativarControles();


            frmActiveChild.Refresh();


         }


}


…..


Quadro 2: Fragmento de código disparando o evento AoSalvar


 


 


Já no formulário de Produtos. O tratamento do evento disparado é simples e funciona da mesma forma como qualquer outro evento built-in. Você pode gerar o código para o EventHandler simplesmente clicando sobre a linha deste evento na Janela de Propriedades. Veja o Quadro 3 com o evento tratado.


 


private void frmProdutos_AoSalvar(object sender, EventArgs e)


{


MessageBox.Show(“Disparado o evento AoSalvar!”);


}


Quadro 3: Consumindo o Evento AoSalvar


 


Conclusão


Com este exemplo, você pode criar seus eventos personalizados e oferecer um feedback mais elegante e eficiente para os usuários das suas aplicações Windows Forms. Existe ainda a possibilidade de implementar eventos mais complexos incluindo informações peculiares ao evento customizado, consulte o MSDN para maiores informações.


 

A Crise segundo Einstein


“Não pretendemos que as coisas mudem, se sempre fazemos o mesmo. A crise é a melhor benção que pode ocorrer com as pessoas e países, porque a crise traz progressos. A criatividade nasce da angústia, como o dia nasce da noite escura. É na crise que nascem as invenções, os descobrimentos e as grandes estratégias. Quem supera a crise, supera a si mesmo sem ficar superado”.


“Quem atribui à crise seus fracassos e penúrias, violenta seu próprio talento e respeita mais aos problemas do que às soluções. A verdadeira crise é a crise da incompetência. O inconveniente das pessoas e dos países é a esperança de encontrar as saídas e soluções fáceis. Sem crise não há desafios, sem desafios, a vida é uma rotina, uma lenta agonia. Sem crise não há mérito. É na crise que se aflora o melhor de cada um. Falar de crise é promovê-la, e calar-se sobre ela é exaltar o conformismo. Em vez disso, trabalhemos duro. Acabemos de uma vez com a única crise ameaçadora, que é a tragédia de não querer lutar para superá-la”.


Albert Einstein

Estruturas Condicionais no C#

 Introdução


Estruturas condicionais são comuns e necessárias em todos os programas. A declaração if…else está entre as mais utilizadas pelos desenvolvedores. Este pequeno artigo aborda a sintaxe da declaração if…else e também explora outras construções condicionais presentes no C#. Algumas delas pouco conhecidas dos novos programadores e mais familiares para quem já utilizava a linguagem C.


 Esclarecendo o básico


Os programadores iniciantes, sempre apresentam dúvidas sobre a sintaxe da declaração if…else. Usar ou não delimitadores de bloco ({})? Posso escrever a declaração if…else em uma única linha? A maioria dos programadores que estão iniciando na linguagem C# depara-se com essas dúvidas.


 IF…ELSE com expressões simples


A declaração condicional if…else pode ser escrita de diferentes formas, especialmente quando estamos construindo uma expressão simples, onde uma única ação é executada caso a expressão seja verdadeira. Todos os exemplos apresentados no quadro abaixo são válidos.


 // considere as variáveis X e Y


int x = 0;


int y = 5;


 // declaração IF em uma única linha


if (x > y) return;


 // declaração IF…ELSE em duas linhas


if (x > y) MessageBox.Show(“X > Y”);


else MessageBox.Show(“X < Y”);


 // declaração IF…ELSE com quebra de linha


if (x > y)


MessageBox.Show(“X > Y”);


else


MessageBox.Show(“X < Y”);


 // declaração IF…ELSE em uma única linha


if (x > y) MessageBox.Show(“X > Y”); else MessageBox.Show(“X < Y”);


 // utilização dos delimitadores de bloco neste caso


// apesar de válido é desnecessário.


if (x > y)


{


    MessageBox.Show(“X > Y”);


}


else


{


    MessageBox.Show(“X < Y”);


}


Quadro 1: Exemplos de construções condicionais válidas


  


Os delimitadores de bloco { }


Quando precisamos executar mais de uma ação após avaliar a expressão condicional, então faz-se necessário a utilização dos delimitadores de bloco, que tem a função de agrupar um conjunto de instruções ou linhas de comando. Veja o exemplo no quadro abaixo.


 


// utilização dos delimitadores de bloco neste caso


// é necessária para que várias ações sejam executadas


// caso a expressão seja satisfeita.


if (x > y)


{


MessageBox.Show(“X > Y”);


this.Text = “Expressão é verdadeira.”;


this.AtivarControles();              


}


else


{


MessageBox.Show(“X < Y”);


this.Text = “Expressão é falsa.”;


this.DesativarControles();


}


Quadro 2: Utilizando delimitadores de bloco


Outras declarações condicionais


O C# oferece outra opção para construção de declarações condicionais. Os operadores ?: representam uma boa alternativa para quem já estava habituado com a linguagem C. Podemos até fazer uma comparação grosseira da sintaxe utilizadas com esses operadores com a função IIF no VB ou VBA. A sintaxe utilizada é <expressão> ? <verdadeira> : <falsa>. Veja os exemplos no quadro abaixo:


 


int x = 1;


int y = 2;


int z = 3;


 


// definindo a mesagem de acordo com a expressão


MessageBox.Show(x > y ? “X > Y” : “X < Y”);


 


// atribui valor para z de acordo com a expressão


z = x > y ? x * z : y * z;


MessageBox.Show(z.ToString());


 


// expressões condicionais aninhadas


// z = <expr1> ? <true> : <expr2> ? <true> : <false>


z = x > y && x == 1 ? x * z : y > 1 ? y * z : y * z + x;


MessageBox.Show(z.ToString());


Quadro 3: Expressões condicionais com operadores ?:


 Numa primeira impressão, esse tipo de construção pode parecer confuso, contudo se o desenvolvedor analisar esta sintaxe, verá que os operadores ?: podem ser muito úteis e práticos em diversos cenários de codificação. Expressões simples ou aninhadas podem ser facilmente construídas com os operadores ?:. Para auxiliar a interpretação da expressão apresentada no Quadro 3, a figura abaixo explica sua anatomia.


 Anatomia Expressão Condicional 


Figura 1: Anatomia da expressão condicional com operadores ?:


 Conclusão


Com certeza você já implementou diversas expressões condicionais e todas funcionam muito bem. O propósito deste artigo é auxiliar os principiantes na linguagem C# a entender a sintaxe correta das diferentes formas de declarações condicionais. Muitos programadores, mesmo experientes, não conhecem ou não tem o hábito de utilizar os operadores ?: que podem facilitar a codificação de expressões condicionais simples ou aninhadas. Explore as dicas acima e aprimore suas expressões condicionais.

Tipos Nulos (Nullable Types) no C#

Introdução


Os tipos nulos são especialmente úteis em operações envolvendo bancos de dados e outras situações que podem apresentar valores nulos em pontos onde são esperados valores tipados. Existem várias formas para o desenvolvedor contornar essas situações, neste artigo vamos explorar os operadores de tipos nulos disponíveis no C#. 


 Operadores de Tipos Nulos


No C# temos operadores que facilitam a declaração de variáveis e criação de expressões contendo valores nulos. Esses operadores são pouco conhecidos pelos programadores que estão iniciando nesta linguagem. Abaixo estão alguns exemplos que ilustram a utilização dos operadores (?) e (??) utilizados na manipulação de Tipos Nulos no C#.


 // x pode ser um Int32 ou Nulo


int? x = null;


 // y pode ser True/False ou Nulo


bool? y = null;


 // z pode ser um Double ou Nulo


double? z = null;


 A propriedade HasValue


Como mostra o exemplo acima, o operador (?) permite a atribuição de valores nulos para variáveis tipadas. Para testar o conteúdo de uma variável de Tipo Nulo o desenvolvedor pode utilizar a propriedade HasValue(). Esta propriedade retorna False se o conteúdo da variável for Nulo e True caso tenha um valor atribuído.


 // x pode ser um Int32 ou Nulo


int? x = null;


 if (x.HasValue)


   // x contém um valor inteiro válido


else


   // x contém valor nulo


 A propriedade Value


A propriedade Value retorna o valor armazenado na variável ou uma exceção do tipo  InvalidOperationException caso a variável contenha valor nulo.


 // x pode ser um Int32 ou Nulo


int? x = null;


 // y é um valor Int32


int y = 0;


 try


{


y = x.Value;


}


catch (InvalidOperationException )


{


MessageBox.Show(“Operação inválida!”);


}


  


O método GetValueOrDefault()


Outro método no qual o desenvolvedor pode apoiar-se é o GetValueOrDefault(). Este método retorna o valor armazenado na variável de tipo nulo ou o valor padrão para o tipo de dados da variável caso esta contenha valor nulo. Por exemplo, para uma variável declarada como bool? x = null o método GetValueOrDefault() retornará False (valor padrão para o tipo de dado boolean). Veja o código abaixo:


 // x pode ser um Int32 ou Nulo


int? x = null;


 


// y receberá valor 0 (zero) que é o valor padrão para o tipo Int32


int y = x.GetValueOrDefault();


 


O Operador (??)


Outro operador muito útil neste cenário é o operador ??. Com ele é possível determinar um valor que será à variável quando a variável testada contiver valor nulo. Veja o exemplo abaixo:


 


// variável de tipo nulo


bool? b = null;


// variável de tipo Bool


bool c = false;


 


// o operador ?? atribuirá valor True pois b é nulo


c = b ?? true;


 


// variável de tipo nulo


int? j = null;


// variável de tipo Int32


int k = 0;


 


// a variável k receberá valor 42 pois j é nulo


k = j ?? 42;


 


Conclusão


Existem diversos cenários onde precisamos manipular valores nulos. Os operadores mostrados acima, podem auxiliar o desenvolvedor na construção de expressões que manipulam valores nulos.