J'essaye de générer du code à l'exécution où je mets des trucs de plaque de chaudière et l'utilisateur est autorisé à entrer le code de travail réel. Mon code passe-partout ressemble à ceci:Comment mettre {et} dans une chaîne de format
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 d'utilisateur et créer un nom de classe unique, mais je reçois une exception sur la chaîne de format à moins il ressemble à ceci:
string formatString = @"
using System;
public class ClassName
{0}
public double TheFunction(double input)
{0}
{2}
{1}
{1}";
J'appelle string.Format comme ceci:
string entireClass = string.Format(formatString, "{", "}", userInput);
cela est bien et je peux faire face à la laideur de l'utilisation de {0} et {1} dans le format chaîne à la place de mon accolades sauf que maintenant mon entrée utilisateur ne peut pas utiliser des accolades non plus. Y at-il un moyen d'échapper les accolades dans ma chaîne de format, ou un bon moyen de transformer les accolades dans le code de l'utilisateur en {0} et {1}? BTW, je sais que ce genre de chose est un problème de sécurité en attente de se produire, mais il s'agit d'une application Windows Forms à usage interne sur les systèmes qui ne sont pas connectés au réseau, donc le risque est acceptable dans cette situation.
C'est un problème de sécurité car le code qu'un utilisateur peut exécuter peut être littéralement n'importe quoi, pas parce qu'il est connecté au réseau. – MusiGenesis
En fait non, juste parce que le code pourrait être quelque chose ne donne pas à l'utilisateur la possibilité de faire quelque chose qu'il ne pouvait pas faire auparavant. L'application fonctionne dans le même contexte que l'utilisateur et seule une personne ayant accès à la machine sur laquelle elle s'exécute peut introduire du code. –