Frage

    

Diese Frage bereits eine Antwort hier:

         

Ich versuche, einige Code zur Laufzeit zu erzeugen, wo ich in einigen Kesselblech Zeug legen und es dem Benutzer ermöglicht wird, um den tatsächlichen Arbeitscode einzugeben. Mein Kesselblech Code sieht etwa so aus:

using System;

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

Im Idealfall, ich glaube, ich will string.Format verwenden, um den Benutzercode einzufügen und einen eindeutigen Klassennamen erstellen, aber ich erhalte eine Ausnahme auf dem Format-String, wenn es so aussieht:

string formatString = @"
using System;

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

Dann rufe ich string.Format wie folgt aus:

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

Das ist in Ordnung, und ich kann mit der Hässlichkeit des mit {0} und {1} im Format-String anstelle meinen geschweiften Klammern, außer dass jetzt meine Benutzereingaben umgehen kann nicht entweder geschweiften Klammern verwenden. Gibt es eine Möglichkeit, entweder die geschweiften Klammern in meinem Format-String zu entkommen, oder ein guter Weg, die geschweiften Klammern in dem Benutzer-Code verwandeln sie in {0} ‚s und {1}‘ s?

BTW, weiß ich, dass diese Art der Sache ein Sicherheitsproblem auf sich zukommen, aber das ist ein Windows-Anwendung Formulare, die auf Systeme für die internen Gebrauch ist, die nicht mit dem Netz verbunden ist, so dass das Risiko in dieser Situation akzeptabel ist.

War es hilfreich?

Lösung

Escape sie sie durch Verdoppelung:

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

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

Andere Tipps

"{{" und "}}"

Was ich denke, Sie wollen, ist dies ...

string formatString = @"
using System;

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

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

Verdoppeln Sie die Klammern: string.Format("{{ {0} }}", "Hello, World"); erzeugen würde { Hello, World }

Seien Sie besonders besonders vorsichtig in dem Zugriff auf die Anwendung hat. Eine bessere Lösung könnte darin bestehen, einen einfachen Parser zu erstellen, die ein paar begrenzt, Befehle erwarten nur.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top