Domanda

    

Questa domanda ha già una risposta qui:

         

Sto provando a generare un po 'di codice in fase di esecuzione in cui ho inserito alcune cose sulla piastra della caldaia e all'utente è consentito inserire il codice di lavoro effettivo. Il mio codice della piastra della caldaia è simile al seguente:

using System;

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

Idealmente, penso di voler usare string.Format per inserire il codice utente e creare un nome di classe univoco, ma ottengo un'eccezione sulla stringa di formato a meno che non appaia così:

string formatString = @"
using System;

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

Quindi chiamo string.Format in questo modo:

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

Questo va bene e posso gestire la bruttezza di usare {0} e {1} nella stringa di formato al posto delle mie parentesi graffe, tranne per il fatto che ora il mio input dell'utente non può usare nemmeno le parentesi graffe. C'è un modo per sfuggire alle parentesi graffe nella mia stringa di formato o un buon modo per trasformare le parentesi graffe nel codice utente in {0} e {1}?

A proposito, so che questo genere di cose è un problema di sicurezza in attesa di accadere, ma questa è un'app di Windows Form per uso interno su sistemi non collegati alla rete, quindi il rischio è accettabile in questa situazione.

È stato utile?

Soluzione

Sfuggili raddoppiandoli:

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

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

Altri suggerimenti

" {{" e "}} "

Quello che penso tu voglia è questo ...

string formatString = @"
using System;

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

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

Raddoppia le parentesi graffe: string.Format (" {{{0}}} " ;, " Hello, World "); produrrebbe {Hello, World}

Sii più cauto in chi ha accesso all'applicazione. Una soluzione migliore potrebbe essere quella di creare un semplice parser che prevede solo pochi comandi limitati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top