Question

    

Cette question a déjà une réponse ici:

         

J'essaie de générer du code au moment de l'exécution, en insérant des éléments de chaudière et en permettant à l'utilisateur de saisir le code de travail. Mon code de plaque de chaudière ressemble à ceci:

using System;

public class ClassName
{
    public double TheFunction(double input)
    {
        // user entered code here
    }
}

Idéalement, je pense que je veux utiliser string.Format pour insérer le code utilisateur et créer un nom de classe unique, mais je reçois une exception sur la chaîne de format sauf si elle ressemble à ceci:

string formatString = @"
using System;

public class ClassName
{0}
    public double TheFunction(double input)
    {0}
        {2}
    {1}
{1}";

Ensuite, j'appelle string.Format comme ceci:

string entireClass = string.Format(formatString, "{", "}", userInput);

Cela convient et je peux gérer la laideur d'utiliser {0} et {1} dans la chaîne de formatage à la place de mes accolades, à l'exception du fait que mon entrée d'utilisateur ne peut pas non plus utiliser d'accolades. Existe-t-il un moyen d'échapper aux accolades de ma chaîne de format ou de transformer les accolades du code utilisateur en {0} et en {1}?

BTW, je sais que ce genre de problème est un problème de sécurité imminent, mais il s'agit d'une application Windows Forms destinée à un usage interne sur des systèmes non connectés au réseau, de sorte que le risque est acceptable dans cette situation.

Était-ce utile?

La solution

Évadez-les en les doublant:

string s = String.Format("{{ hello to all }}");
Console.WriteLine(s); //prints '{ hello to all }'

De http://msdn.microsoft.com/en-us /netframework/aa569608.aspx#Question1

Autres conseils

" {{" et "}}"

Ce que je pense que vous voulez, c'est ceci ...

string formatString = @"
using System;

public class ClassName
{{
    public double TheFunction(double input)
    {{
        {0}
    }}
}}";

string entireClass = string.Format(formatString, userInput);

Double les accolades: string.Format ("{{{0}}}", "" Bonjour, monde "); produirait {Bonjour, monde}

Soyez extrêmement prudent lorsque vous avez accès à l'application. Une meilleure solution pourrait être de créer un analyseur syntaxique simple qui n’attend que quelques commandes limitées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top