.NET CLI: um guia rápido

A .NET CLI é a ferramenta de linha de comando padrão do ecossistema .NET. Por meio dela é possível criar, executar e até mesmo publicar projetos .NET utilizando apenas comandos no terminal, sem dependência de um IDE. Neste guia rápido traremos para você os principais recursos da .NET CLI, conhecimento que atualmente é fundamental para todo desenvolvedor .NET. O que é a .NET CLI As ferramentas de linha de comando, chamadas de CLI (Command-Line Interface), são aplicações que permitem realizar diferentes tarefas em um contexto por meio de comandos do terminal. Por não possuírem uma interface gráfica, elas são geralmente leves e oferecem a mesma experiência de uso em diferentes sistemas operacionais. Além disso, por funcionarem com base em comandos do terminal, elas podem ser usadas não apenas de forma manual, mas também como parte de fluxos automatizados, como esteiras de CI/CD. Algumas ferramentas desse tipo muito comuns entre os desenvolvedores são o apt-get, usado para o gerenciamento de pacotes no Linux; o npm e o yarn, gerenciadores de pacotes JavaScript; as interfaces docker e kubectl, respectivamente do Docker e do Kubernetes; além daquelas que acompanham frameworks e outras ferramentas de desenvolvimento, como ng (Angular), ionic (Ionic) e nest (Nest.js). Neste contexto, a .NET CLI é uma ferramenta multiplataforma que simplifica o ciclo de vida do desenvolvimento .NET. Ela pode ser acessada diretamente do prompt de comandos, tornando-a acessível e fácil de usar em diferentes sistemas operacionais, sem a dependência de um IDE. Sintaxe dos comandos A sintaxe dos comandos da .NET CLI é simples, dividida em três partes principais: dotnet comando argumentos “dotnet” é o executor, ou seja, a aplicação principal; em seguida temos o comando específico, que indica qual ação será realizada; por fim, vêm os argumentos e opções que fornecem ao comando as informações necessárias para seu funcionamento. Cada comando espera argumentos diferentes, que podem ser opcionais. Por exemplo, para criar um novo projeto de console em C#, utilizamos o comando: dotnet new console –language C# No comando acima: “dotnet” é o executor que chama a CLI do .NET. “new” é o comando específico que indica que queremos criar um novo projeto. “console” é um argumento que especifica o tipo de projeto que estamos criando, no caso, um projeto de console. “–language C#” é uma opção que define a linguagem de programação a ser utilizada no projeto, que neste caso é C#. Algumas opções possuem uma versão principal e uma abreviada. Por exemplo, a opção –help também pode ser passada como -h. Para verificar se você possui o .NET CLI instalado, basta abrir um prompt de comando e digitar “dotnet”. Isso exibirá informações sobre a versão instalada e os comandos disponíveis. Caso você ainda não tenha o .NET instalado, é possível obtê-lo através do site oficial da Microsoft. Explorando os comandos básicos Conseguindo ajuda Sempre que precisar de ajuda com algum comando da CLI do .NET, basta adicionar “-h” ou “–help” ao final do comando para exibir informações detalhadas sobre seu uso. Por exemplo, ao digitar “dotnet new -h”, você obterá uma lista de opções e argumentos disponíveis para o comando “new”, conforme mostrado abaixo: dotnet new -h Este comando exibirá uma descrição do comando “new”, incluindo as diferentes opções de templates que podem ser usados (como console, mvc, classlib, etc.), além das opções e argumentos específicos que podem ser aplicados a cada template. Esta funcionalidade é extremamente útil para explorar todas as capacidades da CLI e aprender rapidamente como utilizar novos comandos e opções. Criando um projeto Um dos primeiros passos ao iniciar um novo projeto é criar sua estrutura básica. Com a .NET CLI, isso é feito de maneira simples e direta. Por exemplo, para criar um novo projeto de console, utilize o comando: dotnet new console Cada comando normalmente assume alguns valores padrão para os argumentos. Por exemplo, ao executar o comando acima será criado um projeto cujo nome é o mesmo da pasta em que ele foi executado. Por exemplo, se o terminal está aberto na pasta C:MeuProjeto, o comando acima criará um projeto chamado MeuProjeto.csproj. Outro exemplo de valor padrão é a linguagem utilizada (C#). Caso deseje alterar, é possível informar a opção–language ou -lang. Para saber quais templates de projeto estão disponíveis, utilize o comando abaixo: dotnet new list Para cada template listado, você pode obter ajuda com o argumento -h a fim de entender quais outros argumentos podem ser informados. Gerenciando pacotes do Nuget Na maioria dos projetos em que trabalhamos é necessário utilizar pacotes do Nuget. Com a .NET CLI você pode adicionar um pacote da seguinte forma: dotnet add package NomeDoPacote Este comando deve ser executado na pasta em que se encontra o csproj e adiciona a referência ao pacote especificado no arquivo de projeto e baixa a versão mais recente do pacote NuGet. Se você precisar adicionar uma versão específica de um pacote, basta especificar a versão desejada usando a opção –version ou -v. Já para remover o pacote, basta usar o comando remove: dotnet remove package NomeDoPacote E à medida que o projeto cresce, é comum utilizarmos vários pacotes. Então, para listar todos os que estão instalados, basta executar: dotnet list package Este comando exibe uma lista de todos os pacotes instalados no projeto atual, incluindo informações sobre a versão do pacote e a origem (source) de onde o pacote foi obtido. Isso é útil para verificar rapidamente quais dependências estão sendo usadas em seu projeto. Por fim, para garantir que todas as dependências do projeto estejam corretamente instaladas e configuradas, utilize o comando: dotnet restore Esse comando utiliza o NuGet.exe por trás dos panos para restaurar todas as dependências listadas no arquivo de projeto .csproj. Ele verifica os pacotes NuGet necessários e os baixa para o diretório de pacotes local do projeto, garantindo que todas as bibliotecas e ferramentas necessárias estejam disponíveis para o desenvolvimento. Limpando e compilando o projeto Agora para manter seu ambiente de desenvolvimento limpo e garantir que o código seja compilado corretamente, você pode utilizar os seguintes comandos: dotnet clean
Colunas calculadas no Entity Framework

Neste artigo veremos como implementar colunas calculadas com o Entity Framework.
Moderação de conteúdo com a OpenAI em .NET

A moderação de conteúdo é uma parte crucial na gestão de plataformas online, garantindo que o conteúdo publicado esteja de acordo com as diretrizes da comunidade e evitando a disseminação de informações prejudiciais. A OpenAI oferece uma API de moderação que pode ser integrada em projetos .NET para analisar e moderar automaticamente o conteúdo. Modelo de moderação utilizado A API de moderação da OpenAI utiliza o modelo “text-moderation-007”, projetado para analisar textos e identificar categorias de conteúdo inadequado, como violência, assédio, discurso de ódio, entre outros. Este modelo funciona avaliando o conteúdo de entrada e retornando um conjunto de categorias com pontuações que indicam a probabilidade de cada categoria estar presente no texto. Aplicação em projetos reais A moderação automática de conteúdo pode ser aplicada em diversas áreas, como: Redes sociais: filtragem de postagens, comentários e mensagens privadas. Plataformas de e-commerce: moderação de avaliações e comentários de produtos. Fóruns e comunidades online: monitoramento de tópicos e respostas para garantir um ambiente saudável. Aplicativos de mensagens: prevenção de assédio e spam em conversas. Com isso, podemos perceber que a integração da API de moderação da OpenAI em um projeto .NET pode ajudar a manter a integridade e a segurança da plataforma, reduzindo a necessidade de intervenção manual. Implementação da API Indo para a nossa aplicação de exemplo, vamos utilizar um projeto de API construído em ASP.NET que será responsável por receber o conteúdo a ser moderado e fazer a integração com a API de moderação da OpenAI. Para nos comunicarmos com a API de moderação, precisaremos de uma chave de API. Caso você não tenha uma chave de API da OpenAI, você pode seguir nosso tutorial detalhado, que cobre desde a criação da conta na plataforma até a geração e configuração da chave de API necessária para utilizar os serviços de moderação. Após gerar o nosso projeto e criar a chave de API, devemos criar um controller chamado “ContentModerationController” e uma action do tipo POST chamada “ModerateContent”, recebendo um parâmetro do tipo string com o nome “content”, que será o texto que enviaremos para a API de moderação da OpenAI. Adicionamos também um bloco try-catch para lidar com eventuais erros que possam ocorrer durante o processo de moderação. using Microsoft.AspNetCore.Mvc; using System.Text.Json; using System.Text; using System.Net.Http; namespace ContentModerationApp.Controllers { [Route(“api/[controller]”)] [ApiController] public class ContentModerationController : ControllerBase { [HttpPost] public async Task ModerateContent(string content) { try { // Nosso código de interação para moderação de conteúdo. } catch (Exception ex) { return StatusCode(500, $”Erro ao moderar conteúdo: {ex.Message}”); } } } } Com a estrutura base do nosso projeto ASP.NET definida, o primeiro passo é armazenar a chave de API gerada no site da OpenAI em uma string dentro do bloco “try” para que possamos utilizá-la em nossas requisições. string openaiApiKey = “sua chave aqui”; Em seguida, vamos construir o corpo da requisição. Aqui, definimos a mensagem que desejamos moderar, que é passada através do parâmetro “content”. var requestBody = new { input = content }; Para enviar a requisição HTTP, precisamos serializar o objeto “requestBody” para o formato JSON. var requestBodyJson = JsonSerializer.Serialize(requestBody); Agora vamos criar um cliente HTTP utilizando “HttpClient” para enviar uma solicitação POST à API da OpenAI. using (var httpClient = new HttpClient()) { //Código da requisição. } Vamos também adicionar dentro do cliente HTTP a chave de autorização no cabeçalho da requisição para garantir que a solicitação seja autenticada corretamente. httpClient.DefaultRequestHeaders.Add(“Authorization”, $”Bearer {openaiApiKey}”); Depois de configurar o cliente HTTP com a chave de autorização, o próximo passo é enviar uma requisição POST para a API da OpenAI. O corpo da requisição contém os dados necessários para a moderação de conteúdo, que foram previamente serializados em JSON. var response = await httpClient.PostAsync(“https://api.openai.com/v1/moderations”, new StringContent(requestBodyJson, Encoding.UTF8, “application/json”)); Após enviar a requisição, precisamos processar a resposta recebida da API. O código a seguir verifica se a resposta foi bem-sucedida e lê o corpo da resposta como uma string. if (response.IsSuccessStatusCode) { string responseBody = await response.Content.ReadAsStringAsync(); return Ok(responseBody); } else { return BadRequest(response.StatusCode); } Analisando a resposta Ao executarmos nossa API e enviarmos uma requisição, receberemos uma resposta da API de moderação da OpenAI no formato JSON, contendo informações detalhadas sobre o conteúdo analisado. A seguir, apresentamos um exemplo de resposta juntamente com sua explicação. { “id”: “modr-9ijvCEVyMvw36jrtEhS0WlofXm9mt”, “model”: “text-moderation-007”, “results”: [ { “flagged”: false, “categories”: { “sexual”: false, “hate”: false, “harassment”: false, “self-harm”: false, “sexual/minors”: false, “hate/threatening”: false, “violence/graphic”: false, “self-harm/intent”: false, “self-harm/instructions”: false, “harassment/threatening”: false, “violence”: false }, “category_scores”: { “sexual”: 0.000013486678653862327, “hate”: 0.09813056141138077, “harassment”: 0.200340136885643, “self-harm”: 0.0008290316327475011, “sexual/minors”: 5.089680712444533e-7, “hate/threatening”: 0.044729895889759064, “violence/graphic”: 0.0017252579564228654, “self-harm/intent”: 0.000022909627659828402, “self-harm/instructions”: 0.000021325766283553094, “harassment/threatening”: 0.18670909106731415, “violence”: 0.000022909627659828402 } } ] } O campo “id” identifica exclusivamente a requisição de moderação de conteúdo dentro do sistema da OpenAI. Cada requisição feita à API recebe um ID único. O campo “model” indica o modelo utilizado para realizar a moderação de conteúdo. Neste caso, o modelo é o text-moderation-007, que citamos anteriormente. O campo “flagged” indica se o texto analisado foi marcado como problemático ou inapropriado pelo modelo. Neste exemplo, “flagged” está definido como false, indicando que o texto analisado não contém nenhum tipo de conteúdo que possa ser considerado inadequado. Este campo é especialmente útil em sistemas de moderação onde qualquer ocorrência de conteúdo inadequado, conforme as categorias avaliadas, deve ser rigorosamente bloqueada. Dentro de cada resultado, há informações detalhadas sobre as categorias de conteúdo analisadas e os scores associados a cada uma delas. Aqui estão as categorias e seus significados: sexual: conteúdo de natureza sexual explícita. hate: conteúdo que expressa ódio ou intolerância. harassment: conteúdo que constitui assédio ou intimidação. self-harm: conteúdo que promove ou encoraja danos a si mesmo. sexual/minors: conteúdo sexual envolvendo menores de idade. hate/threatening: conteúdo de ódio que inclui ameaças. violence/graphic: conteúdo violento ou gráfico. self-harm/intent: conteúdo que sugere intenção de se prejudicar. self-harm/instructions: conteúdo que fornece instruções sobre como se ferir. harassment/threatening: conteúdo de assédio que inclui ameaças. violence: conteúdo violento geral. Cada categoria possui um score que vai de 0 a 1, onde valores mais próximos de
Como implementar Soft Delete com Entity Framework

Neste artigo exploraremos o que é o Soft Delete, como implementá-lo usando o Entity Framework e exemplos práticos para ilustrar seu funcionamento.
Formatando números em C#

A formatação de números é uma tarefa essencial para garantir que os dados sejam apresentados de forma clara e precisa. Em C#, a linguagem oferece diversas maneiras de formatar números, permitindo uma apresentação personalizada para atender a diferentes necessidades. Entre as opções disponíveis estão o uso de especificadores de formato padrão e personalizados. Neste artigo exploraremos essas abordagens com exemplos práticos. Especificadores de formato padrão Assim como falado no artigo sobre formatação de data e hora, o método “ToString” recebe especificadores que vão formatar a data e hora com base em um padrão, na formatação de números também utilizamos especificadores que vão definir como os números devem ser apresentados. Alguns dos especificadores mais comuns são “C” (moeda), “D” (decimal), “E” (científico), “F” (fixo), “N” (numérico) e “P” (percentual). Cada um deles permite formatar números de acordo com convenções específicas, como moeda localizada, notação científica, número fixo de casas decimais, entre outros, facilitando a apresentação precisa e legível dos dados numéricos em aplicações diversas. Especificador de formato “C” (moeda) O especificador de formato “C” é utilizado para formatar um número como valor monetário, de acordo com as configurações culturais do sistema. Isso inclui o símbolo da moeda, os separadores de milhar e os separadores decimais. decimal valor = 1234.56m; string valorFormatado = valor.ToString(“C”); Console.WriteLine(valorFormatado); // Saída: R$ 1.234,56 Neste exemplo, o valor “1234.56” é formatado como moeda, exibindo o símbolo da moeda e os separadores de milhar e decimal adequados ao formato brasileiro que é a cultura do sistema em que a aplicação foi executada. Especificador de formato “D” (decimal) O especificador de formato “D” é usado para formatar números inteiros com um número fixo de dígitos. Ele é especialmente útil quando você precisa garantir que os números tenham uma quantidade específica de dígitos, preenchendo com zeros à esquerda, se necessário. Por exemplo, em sistemas de inventário ou produção, números de lote podem ser formatados de maneira semelhante para garantir consistência. int numeroLote = 7; string codigoLote = numeroLote.ToString(“D5″); Console.WriteLine($”Número do Lote: {codigoLote}”); // Saída: Número do Lote: 00007 O “D” indica que o número deve ser formatado como um inteiro decimal, e o “5” especifica que a representação do número deve ter exatamente cinco dígitos. Se o número original tiver menos de cinco dígitos, zeros serão adicionados à esquerda para preencher a quantidade necessária de dígitos. Especificador de formato “E” (notação científica) O especificador “E” formata um número em notação científica. double numeroGrande = 12345.6789; string numeroFormatado = numeroGrande.ToString(“E2″); Console.WriteLine(numeroFormatado); // Saída: 1.23E+004 Ao usar o especificador “E” com duas casas decimais (“E2”), o valor é exibido como “1,23E+004”. Este formato é vantajoso para representar números muito grandes ou muito pequenos de maneira mais concisa e legível. Especificador de formato “F” (fixo) O especificador “F” formata um número com um número fixo de casas decimais. double numero = 123.456; string numeroFormatado = numero.ToString(“F2″); Console.WriteLine(numeroFormatado); // Saída: 123.46 Aqui, o valor “123.456” é formatado com duas casas decimais fixas. Usando o especificador “F2”, o número é arredondado para “123.46”. Esse formato é ideal quando se deseja uma precisão decimal específica. Especificador de formato “N” (numérico) O especificador N formata um número com separadores de milhar int numero = 123456789; string numeroFormatado = numero.ToString(“N0″); Console.WriteLine(numeroFormatado); //Saída: 123.456.789 Utilizando o especificador “N0”, o valor é exibido como “123.456.789”. O “0” indica que não é necessário adicionar nenhuma casa decimal. Esse formato é útil para melhorar a legibilidade de números grandes. Além disso, você pode adicionar outro número após o “N” para especificar a quantidade de casas decimais. Por exemplo, “numero.ToString(“N3”)” exibirá o valor com três casas decimais, resultando em “123.456.789,000”. Especificador de formato “P” (percentual) O especificador “P” converte o número em uma porcentagem, multiplicando-o por 100 e adicionando o símbolo de porcentagem. double taxa = 0.1234; string taxaFormatada = taxa.ToString(“P”); Console.WriteLine(taxaFormatada); // Saída: 12,34% Usando o especificador “P”, o valor é multiplicado por 100 e exibido como “12,34%”. Esse formato é adequado para representar frações como porcentagens Especificadores de formato personalizado Os especificadores de formato personalizado permitem um controle mais detalhado sobre a apresentação dos números. É possível especificar o número de casas decimais a serem exibidas utilizando 0 e # como placeholders. O placeholder “0” força a exibição de dígitos, mesmo que eles sejam zeros. Já o placeholder “#” exibe dígitos apenas se eles forem significativos. double numero = 1234.5; string numeroFormatadoComZeros = numero.ToString(“0.00”); string numeroFormatadoComSharp = numero.ToString(“0.##”); Console.WriteLine(numeroFormatadoComZeros); // Saída: 1234,50 Console.WriteLine(numeroFormatadoComSharp); // Saída: 1234,5 No caso do “0.00”, o número é exibido com duas casas decimais, mesmo que sejam zeros. No caso do “0.##”, as casas decimais só são exibidas se forem significativas. Máscaras personalizadas Usando o método ToString é possível aplicar formatações variadas a valores numéricos, exibindo-os, por exemplo, como números de telefone ou códigos específicos. O código abaixo mostra dois exemplos: long telefone = 1123456789; string telefoneFormatado = telefone.ToString(“(00) 00000-0000”); Console.WriteLine(telefoneFormatado); // Saída: (11) 2345-6789 int codigoProduto = 123; string codigoFormatado = codigoProduto.ToString(“PROD-0000”); Console.WriteLine(codigoFormatado); // Saída: PROD-0123 Apesar desse tipo de informação ser normalmente armazenada como texto, é importante conhecermos as possibilidades que a linguagem nos oferece. Acelere a sua carreira conosco! Se você é Desenvolvedor .NET Júnior e quer acelerar sua carreira até nível Pleno com salário de R$7k+, ou mesmo busca a primeira vaga, conheça a Mentoria .NET Start: Clique aqui Se é Desenvolvedor .NET Pleno ou Sênior e quer virar referência técnica em sua equipe e mercado, com salário de R$10k+, conheça a Mentoria .NET Expert: Clique aqui Conclusão A formatação de números em C# é uma habilidade crucial para qualquer desenvolvedor que busca apresentar dados de forma clara e adequada. Utilizando especificadores de formato padrão e personalizado, é possível adaptar a apresentação de números às necessidades específicas de cada aplicação. Com a prática e a exploração dessas ferramentas, a formatação de números se tornará uma tarefa simples e eficiente.
Métodos de busca em strings em C#

No desenvolvimento de software, a manipulação de strings é uma tarefa comum e essencial. Em C#, a linguagem oferece uma série de métodos para realizar buscas em strings de maneira eficiente e intuitiva. Entre os métodos utilizados estão “StartsWith”, “EndsWith”, “Contains”, “IndexOf” e ”LastIndexOf”. Neste artigo, exploraremos esses métodos, fornecendo exemplos de situações do dia a dia. StartsWith O método StartsWith” é utilizado para verificar se uma string começa com um determinado prefixo, retornando um valor booleano: “true”, se encontrar uma correspondência e “false”, caso contrário. Este método é muito útil em diversas situações, como validação de entrada de dados ou filtragem de listas. Imagine um sistema de cadastro de usuários onde os números de telefone devem começar com o código do país. Podemos utilizar “StartsWith” para validar essa entrada: string telefone = “+5511999999999”; if (telefone.StartsWith(“+55”)) { Console.WriteLine(“Número de telefone brasileiro.”); } else { Console.WriteLine(“Número de telefone de outro país.”); } Se o telefone do usuário começa com “+55”, que é o DDI (Discagem Direta Internacional) do Brasil, informamos que o número de telefone é brasileiro. Caso contrário, informamos que é um telefone de outro país. Por padrão, o método “StartsWith” verifica a string considerando a caixa das letras. Se a string a ser comparada contiver letras maiúsculas e o parâmetro de verificação não, o resultado será falso: string exemplo = “NextWaveEducation”; bool resultado = exemplo.StartsWith(“nextwave”); Console.WriteLine(resultado); // False Para realizar uma comparação insensível à caixa das letras, é possível utilizar a sobrecarga do método “StartsWith” que aceita um parâmetro “StringComparison”. Utilize “StringComparison.OrdinalIgnoreCase” para ignorar as diferenças entre maiúsculas e minúsculas: string exemplo = “NextWaveEducation”; bool resultado = exemplo.StartsWith(“nextwave”, StringComparison.OrdinalIgnoreCase); Console.WriteLine(resultado); // True EndsWith O método “EndsWith” verifica se uma string termina com um determinado sufixo. Este método pode ser aplicado em várias situações, como verificar extensões de arquivos ou validar formatos específicos. Considere um aplicativo que só aceita uploads de imagens com extensões “jpg” e “png”. Podemos utilizar “EndsWith” para verificar se o arquivo é uma imagem válida: string imagem = “fotoUsuario.jpg”; if (imagem.EndsWith(“.jpg”) || imagem.EndsWith(“.png”)) { //Salvar a imagem do usuário. } else { Console.WriteLine(“Formato de arquivo inválido.”); } Se o nome do arquivo de imagem terminar com “.jpg” ou “.png”, ele será salvo. Caso contrário, será retornada uma mensagem informando que o formato da imagem é inválido. Contains O método “Contains” verifica se uma determinada string contém outra substring específica dentro dela. É como se você estivesse procurando por uma palavra ou conjunto de caracteres dentro de um texto maior. Imagine um sistema de busca que precisa verificar se uma descrição de produto contém certas palavras-chave para classificação. Podemos utilizar o “Contains” para realizar essa verificação: string descricaoProduto = “Este é um smartphone de última geração com câmera de alta resolução.”; if (descricaoProduto.Contains(“smartphone”)) { Console.WriteLine(“O produto é um smartphone.”); } else { Console.WriteLine(“O produto não é um smartphone.”); } IndexOf O método “IndexOf” busca a primeira ocorrência de um caractere ou substring dentro de uma string, retornando o índice da posição encontrada. Esse método é útil para diversas tarefas, como localizar a posição de uma determinada palavra em um texto ou validar a presença de caracteres específicos. Imagine que você deseja encontrar a posição que uma palavra aparece em um texto: string texto = “Estudando sobre strings na Next Wave Education”; string palavraChave = “Next”; int indice = texto.IndexOf(palavraChave); Console.WriteLine($”A palavra ‘{palavraChave}’ aparece na posição {indice} do texto”); O método “IndexOf” é utilizado na string “texto” para buscar a palavra-chave “Next”. Quando encontrada, ele armazena a posição inicial dessa palavra na variável “indice”. No exemplo fornecido, o resultado impresso será: “A palavra ‘strings’ aparece na posição 16 do texto”. LastIndexOf O método “LastIndexOf” funciona de maneira semelhante ao “IndexOf”, mas busca a última ocorrência de um caractere ou substring na string. Esse método é útil quando você precisa localizar a posição final de um caractere ou palavra repetida em um texto. Suponha que você queira extrair o nome de um arquivo dentro de uma string que contém o caminho completo do arquivo: string caminhoCompleto = “C:\Users\Usuario\Documents\projeto\relatorio_final.pdf”; int indiceUltimaBarra = caminhoCompleto.LastIndexOf(‘\’); string nomeArquivoComExtensao = caminhoCompleto.Substring(indiceUltimaBarra + 1); Console.WriteLine(nomeArquivoComExtensao); O método “LastIndexOf” localiza a posição do último separador de diretório (), armazenando essa posição na variável “indiceUltimaBarra”. Utilizando o método “Substring”, o código extrai a parte do texto que começa logo após o último separador de diretório, resultando no nome do arquivo com sua extensão. Acelere a sua carreira conosco! Se você é Desenvolvedor .NET Júnior e quer acelerar sua carreira até nível Pleno com salário de R$7k+, ou mesmo busca a primeira vaga, conheça a Mentoria .NET Start: Clique aqui Se é Desenvolvedor .NET Pleno ou Sênior e quer virar referência técnica em sua equipe e mercado, com salário de R$10k+, conheça a Mentoria .NET Expert: Clique aqui Conclusão Os métodos de busca em strings são ferramentas poderosas no arsenal de um desenvolvedor C#. Eles permitem a realização de verificações, validações de forma simples e eficiente. Desde validações de entrada de dados até filtragens e buscas dentro de textos, esses métodos são aplicáveis em uma ampla variedade de cenários do dia a dia. Entender e saber utilizar esses métodos adequadamente pode aumentar significativamente a eficiência e a robustez de suas aplicações.
Métodos para recuperar um único registro no LINQ

Neste artigo exploraremos os métodos do LINQ que retornam um único objeto, ideais para simplificar e melhorar a legibilidade de consultas que exigem a recuperação de um elemento específico de uma coleção.
Formatando datas e horas em C# com a classe DateTime

Neste artigo, exploraremos métodos como “ToShortDateString”, “ToShortTimeString”, “ToLongDateString”, “ToLongTimeString” e “ToString” com diferentes formatos. Além disso, discutiremos como a cultura (Culture) pode afetar essas formatações e como usar a formatação dentro de uma string interpolada.
Três métodos LINQ essenciais para o desenvolvedor .NET

Conheça três métodos do LINQ que são indispensáveis para todo desenvolvedor .NET.
DALL-E 2 Inpainting: Editando imagens com AI em .NET

Neste artigo exploraremos como integrar e integrar com a API de inpainting do DALL-E 2 usando .NET.