Arquivo

Posts Tagged ‘csharp’

Código único com NanoID.net

Nas suas aplicações, quantas vezes você já precisou de um código único? Seja para identificar um cadastro, um produto no pedido, etc?

O GUID é confiável, mas tem um tamanho exagerado, não? Podemos concordar que ele é ininteligível e difícil de decorar?

Pois bem, encontrei uma alternativa que gostaria de compartilhar: HASH-ID.

Uma biblioteca openSource que tem implementações em diversas linguagens e plataformas: JavaScript, Ruby, Python, Java, Scala, PHP, Perl, Perl 6, Swift, Clojure, Objective-C, C, C++11, D, F#, Go, Erlang, Lua, Haskell, OCaml, Elixir, Rust, Smalltalk, ColdFusion, Kotlin, Nim, VBA, Haxe, Crystal, Elm, ActionScript, Bash, R, TSQL, PostgreSQL, PLpgSQL, Dart, Io and for .NET

É muito fácil de usar. Veja um exemplo de código em CSharp:

public string GerarCodigoDaVenda(){
  return Nanoid.Nanoid.Generate( 
     alphabet: "1234567890abcdefghijklmnopqrstuwvxyz", 
     size: 10
   );                
}

No trecho de código acima, eu delimitei a variedade de caracteres que o NanoID vai utilizar, além de especificar o tamanho em 10 caracteres.

Na biblioteca você pode gerar inúmeras variações:

Normal

Na modalidade padrão, o método usa símbolos amigáveis com URLS (A-Za-z0-9_~), e retorna um ID com 21 caracteres (chances de colisão similares ao formato UUID v4).

var id = Nanoid.Generate() //=> "Uakgb_J5m9g~0JDMbcJqLJ"

Símbolos -,.() não são codificados em URL´s.

Se você quiser reduzir o tamanho do ID, passe o tamanho como argumento:

var id = Nanoid.Generate(size:10) //=> "IRFa~VaY2b"

Customizando o alfabeto:

var id = Nanoid.Generate('1234567890abcdef', 10) //=> "4f90d13a42"

A variação de caracteres deve conter 256 símbolos ou menos. De outra forma não será seguro.

Referências:

https://hashids.org/

Implementação em javascript: https://github.com/ai/nanoid

Implementação p/ .net: https://github.com/codeyu/nanoid-net

Encontrando System.Runtime.Serialization.Json – Silverlight for Windows Phone

Olá Pessoal,
Desenvolvendo para Windows Phone com Silverlight me deparei com um problema, e compartilho a solução.

Se você precisar utilizar os recursos da biblioteca System.Runtime.Serialization.Json, mas adicionando referência para System.Runtime.Serialization não encontrar a classe Json.

Eis a solução:

Adicione referência para System.Servicemodel.Web.

Detectando se Visual Studio está aberto em modo debug

12 - 11 1 comentário

Olá pessoal.

Para detectar se o Visual Studio está aberto, em modo debug, atachado ao seu aplicativo, enquanto você estiver testando / debugando, utilize o comando:

 

    if (System.Diagnostics.Debugger.IsAttached)
       Messagebox.Show("Visual Studio aberto!");

Funciona em aplicativos Windows, Web e Mobile.

Otimizando C#: String e StringBuilder

O objeto String é imutável. Toda vez que é realizado uma operação com um objeto do tipo system.String, você cria um novo objeto na memória, ou seja, na memória RAM do seu computador, é alocado um novo espaço para o resultado da operação.  É como se o objeto fosse movido de lugar a cada operação.

Concatenando string da forma comum:
PERCA DE PERFORMANCE:

var texto = "linha1";
texto = texto + "linha2";
texto = texto + "linha3";
Console.WriteLine(texto);

A cada concatenação de texto subsequente, será percebida uma perca de performance cada vez maior. Em situações onde é necessário executar repetidas operações com strings, é fortemente recomendado o uso de StringBuilder.

A classe System.Text.StringBuilder pode ser usada quando você quer modificar uma string sem criar/alocar um novo objeto. Consequentemente você aumenta a performance na concatenação de várias strings.

OTIMIZAÇÃO DE PERFORMANCE:

StringBuilder StringBuilderConcatena = new StringBuilder("Linha 1!");
StringBuilderConcatena.Append("Linha2.");
StringBuilderConcatena.Append("Linha3.");
Console.WriteLine(StringBuilderConcatena);

Fica aí mais uma dica que espero ser útil.

Até a próxima.

Operador Yield em C#

Recentemente criando um método que retorna IEnumerable, fiz um esforço pra lembrar desse operador mas só consegui lembrar dele agora, depois de constatar sua existência no Ruby: “yield é a palavra reservada de Ruby que pega um ou mais objetos, envia para um bloco para processá-los e devolve o retorno do bloco.”.
No C# podemos utilizar o yield na seguinte situação:

Exemplo Comum de método que retorna uma Estrutura de Dados IEnumerable SEM Yield:

public static IEnumerable<int> Exemplo1(int numero)
        {
            var res = new List<int>();

            for (int i = 0; i < numero; i++)
            {
                res.Add(i);
            }

            return res;
        }

Exemplo Comum de método que retorna uma Estrutura de Dados IEnumerable COM Yield:

public static IEnumerable<int> Exemplo2(int numero)
        {
            for (int i = 0; i <= numero; i++)
                yield return i;
        }

Yield deixa o código mais limpo.
Vale a pena utilizá-lo.


Fontes:
http://blastersystems.com/blog/2009/10/o-operador-yield-c/
http://umamao.com/questions/O-que-faz-a-palavra-reservada-yield-em-Ruby/answers/4dace8c4d196cb6feb0001b0
http://unplugged.giggio.net/unplugged/post/Porque-eu-adoro-C-yield.aspx

Categorias:C#, Dicas / Tips Tags:, , , ,

Validar CNPJ em C#

Mais uma dica no estilo: Copiar, colar e utilizar.

public static bool TestaCnpj(string Cnpj)
{
    string Cnpj_1 = Cnpj.Substring(0, 12);
    string Cnpj_2 = Cnpj.Substring(Cnpj.Length - 2);
    string Mult = "543298765432";
 
    string Controle = String.Empty;
    int Digito = 0;
    for (int j = 1; j < 3; j++)
    {
 
        int Soma = 0;
        for (int i = 0; i < 12; i++)
        {
            Soma += Convert.ToInt32(Cnpj_1.Substring(i, 1)) * Convert.ToInt32(Mult.Substring(i, 1));
        }
 
        if (j == 2)
        {
            Soma += (2 * Digito);
        }
 
        Digito = ((Soma * 10) % 11);
 
        if (Digito == 10)
        {
            Digito = 0;
        }
 
        Controle = Controle + Digito.ToString();
        Mult = "654329876543";
    }
 
    return (Controle != Cnpj_2);
}
Categorias:Dicas / Tips Tags:, , , ,
Viagem e Voo

Dicas para viagens, férias e voos nacionais e internacionais

Ivan Guimarães Meirelles

Analista Desenvolvedor

Void Podcast

Vazio e sem retorno de valor

Elemar DEV

Negócios, tecnologia e desenvolvimento

2,000 Things You Should Know About WPF

Everything a WPF Developer Needs to Know, in Bite-Sized Chunks

Gabriel RB.net

Blog técnico, com dicas, códigos, novidades e problemas do dia-a-dia programando.

Alexandre Valente's Blog

Experiências em tecnologia e assuntos diversos

%d blogueiros gostam disto: