I'm trying to generate some code at runtime where I put in some boiler-plate stuff and the user is allowed to enter the actual working code. My boiler-plate code looks something like this:
using System;
public class ClassName
{
public double TheFunction(double input)
{
// user entered code here
}
}
Ideally, I think I want to use string.Format to insert the user code and create a unique class name, but I get an exception on the format string unless it looks like this:
string formatString = @"
using System;
public class ClassName
{0}
public double TheFunction(double input)
{0}
{2}
{1}
{1}";
Then I call string.Format like this:
string entireClass = string.Format(formatString, "{", "}", userInput);
This is fine and I can deal with the ugliness of using {0} and {1} in the format string in place of my curly braces except that now my user input cannot use curly braces either. Is there a way to either escape the curly braces in my format string, or a good way to turn the curly braces in the user code into {0}'s and {1}'s?
BTW, I know that this kind of thing is a security problem waiting to happen, but this is a Windows Forms app that's for internal use on systems that are not connected to the net so the risk is acceptable in this situation.
Escape them by doubling them up:
string s = String.Format("{{ hello to all }}"); Console.WriteLine(s); //prints '{ hello to all }'
From http://msdn.microsoft.com/en-us/netframework/aa569608.aspx#Question1
"{{" and "}}"
What I think you want is this...
string formatString = @"
using System;
public class ClassName
{{
public double TheFunction(double input)
{{
{0}
}}
}}";
string entireClass = string.Format(formatString, userInput);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With