DEV Community

Juarez Júnior for Develop4Us

Posted on • Edited on

Dica C#: Interpolated String Handlers

Hoje, vamos simplificar o uso de Interpolated String Handlers, uma funcionalidade do C# 12 que permite controlar como strings interpoladas são construídas, de forma otimizada e condicional. Veja o exemplo no código abaixo.

using System;
using System.Runtime.CompilerServices;

public class Program
{
    public static void Main()
    {
        var nomeProduto = "Caneta";

        // Tentativa de logar uma mensagem curta
        LogMessage($"Produto: {nomeProduto}");

        // Tentativa de logar uma mensagem que resultará em mais de 10 caracteres
        LogMessage($"O nome do produto é {nomeProduto}");

        Console.ReadKey();
    }

    public static void LogMessage(MaxLengthLogHandler handler)
    {
        if (handler.IsEnabled)
        {
            Console.WriteLine(handler.GetContent());
        }
    }
}

[InterpolatedStringHandler]
public ref struct MaxLengthLogHandler
{
    private readonly bool _isEnabled;
    private string _message;

    public bool IsEnabled => _isEnabled;

    public MaxLengthLogHandler(int literalLength, int formattedCount)
    {
        // Permite logar apenas se a mensagem resultante tiver 10 caracteres ou menos
        _isEnabled = literalLength <= 10;
        _message = string.Empty;
    }

    // Você poderia manipular os literais aqui
    // Literal é o texto: "Produto: " ou "O nome do produto é "
    public void AppendLiteral(string literal) => _message += literal;

    // Você poderia manipular os valores formatados aqui
    // Valor formatado é o valor da variável: nomeProduto
    public void AppendFormatted<T>(T valor) => _message += valor?.ToString();

    public string GetContent() => _message.Length <= 15 ? _message : string.Empty;
}
Enter fullscreen mode Exit fullscreen mode

Explicação:
Os Interpolated String Handlers permitem que você decida se uma string interpolada deve ser construída ou não, dependendo de condições específicas.
Neste exemplo, a mensagem de log só será construída e exibida se a string resultante tiver 15 caracteres ou menos, considerando o conteúdo interpolado (que é validado no handler). Isso ajuda a evitar a criação de strings muito longas e desnecessárias, economizando recursos e melhorando a performance.

Importante:
Um manipulador de strings interpoladas é um tipo que deve ter as seguintes características:
• O atributo System.Runtime.CompilerServices.InterpolatedStringHandlerAttribute aplicado ao tipo.
• Um construtor que tenha dois parâmetros int, literalLength e formattedCount. (Mais parâmetros são permitidos).
• Um método público AppendLiteral com a assinatura: public void AppendLiteral(string s). Nesse método, você pode manipular o conteúdo literal.
• Um método genérico público AppendFormatted com a assinatura: public void AppendFormatted(T t). Nesse método, você pode manipular o conteúdo enviado de forma interpolada (exemplo, os que são enviados através de váriaveis dentro das chaves {}).

Código fonte: GitHub

Espero que essa dica ajude você a entender como usar Interpolated String Handlers para construir strings de forma eficiente! Até a próxima.

AWS Q Developer image

Your AI Code Assistant

Generate and update README files, create data-flow diagrams, and keep your project fully documented. Built to handle large projects, Amazon Q Developer works alongside you from idea to production code.

Get started free in your IDE

Top comments (0)

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay