IFormattable: Formatando objetos

Salve desenvolvedores,

muitas vezes, precisamos formatar dados, seja num GridView ou para apresentar ao usuário e a sintaxe conhecia é a seguinte: {0:[Formato][Qtde. Casas Decimais]}. Para conhecer os formatos de número e valor, acesse o artigo do colega Israel Aéce.

Aqui, iremos justamente criar o nosso formarto e para a felicidade, o .NET oferece a interface IFormattable que recebe o método ToString, onde é invocado automáticamente pelo .NET ao chamarmos aquela formatação espefícica.

Iremos então, criar uma classe única de formatação. Se você quiser, pode separar cada classe CPF, CNPJ, Telefone, etc… no Namespace Formatacao.

Vamos a criação da classe:

using System;

///


/// Classe para formatação de dados.
///

public class Formatacao : IFormattable
{
private string _texto;

public Formatacao(string texto)
{
_texto = texto;
}

public string ToString(string format, IFormatProvider formatProvider)
{
// Garantimos que não está entrando caracteres a mais.
_texto = _texto.Replace(“-”, “”).Replace(“/”, “”).Replace(“.”, “”);

if (format == “CNPJ”)
return string.Format(@”{0:00\.000\.000\/0000\-00}”, Convert.ToDouble(_texto));
else if (format == “CPF”)
return string.Format(@”{0:000\.000\.000\-00}”, Convert.ToInt32(_texto));

return _texto;
}

public override string ToString()
{
return ToString(null, null);
}
}

Pronto… simples, não?

Agora, para apresentarmos ao usuário, basta adicionarmos o código:

Formatacao formataNumero = new Formatacao(“12345678912″);
Response.Write(string.Format(“CPF: {0:CPF}”, formataNumero));

formataNumero = new Formatacao(“1234567000134″);
Response.Write(string.Format(“CNPJ: {0:CNPJ}”, formataNumero));

E o resultado:

CPF: 123.456.789-12
CNPJ: 01.234.567/0001-34

abraços,

Leave a Reply