2 votes

Modèle de format de chaîne en tant que paramètre

Je suis un débutant en C#. Maintenant, j'ai la tâche suivante : Dans la méthode, je reçois le modèle et les arguments et je dois retourner une chaîne formatée.

Par exemple :

template = "Hello, {name}!"

name = "Bob"

Donc le résultat doit être une chaîne de caractères -> Hello, Bob !

public static string GetHelloGreeting(string template, string name)
{
    return string.Format(template, name);
}

2voto

Tim Schmelter Points 163781

String.Format s'attend à un index dans les accolades. Vous voulez passer le nom à l'intérieur, afin de pouvoir le remplacer par la valeur réelle du nom. Je suggère d'utiliser String.Replace :

public static string GetHelloGreeting(string template, string name)
{
    return template.Replace("{name}", name);
}

Vous pourriez fournir une méthode qui soit plus réutilisable. Par exemple :

public static string ReplaceAll(string template, params (string key, string value)[] replacements)
{
    foreach (var kv in replacements)
    {
        template = template.Replace("{"+ kv.key + "}", kv.value);
    }

    return template;
}

Votre exemple :

string res = ReplaceAll("Hello, {name}!", ("name", "Bob"));

mais également possible avec plusieurs paramètres :

string res = ReplaceAll("Hello, {name}! Now it's {time}", ("name", "Bob"), ("time", DateTime.Now.ToString("HH:mm")));

0voto

Mong Zhu Points 15038

Lorsque vous spécifiez un format, vous utilisez un index pour les paramètres qui suivront. On l'appelle un chaîne de format composite :

string template = "Hello, {0}!"

ce qui le rend indépendant des noms de variables. Mais la véritable raison est que la surcharge de la fonction Format) que vous utilisez prend un tableau params comme paramètre, comme vous pouvez le voir dans la signature de la méthode :

public static string Format (string format, params object?[] args);

Ainsi, l'index trouvé dans le modèle sera appliqué pour extraire les objets aux endroits appropriés du tableau d'objets que vous passez dans la méthode.

0voto

frankM_DN Points 351

La valeur de votre template Le paramètre devra changer d'une manière ou d'une autre. Si vous voulez utiliser l'interpolation de chaînes de caractères, cette réponse montre que. Donc template = $"Hello, {name}"; dans ce cas, vous n'auriez pas besoin d'utiliser String.Format du tout. Assurez-vous simplement de définir name avant de définir template .

Ou vous pouvez utiliser String.Format(template, name); comme vous l'avez fait mais vous auriez besoin template = "Hello, {0}!"; Le site 0 est l'indice de la variable qui sera placée à cette position. Pour plus d'informations, voir String.Format

0voto

Si vous voulez utiliser string.Format() le template doit être correcte. Ajoutez le caractère $ au début de la template :

Essayez ceci :

  string name = "Bob";
  string template = $"Hello, {name}!";

  Console.WriteLine(GetHelloGreeting(template, name)); // Hello, Bob!

  public static string GetHelloGreeting(string template, string name)
  {
       return string.Format(template, name);
  }

résultat :

Bonjour, Bob !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X