2008-10-02 46 views
21

我想在运行时生成一些代码,我把一些锅炉板的东西,并允许用户输入实际的工作代码。我锅炉板代码看起来是这样的:你怎么把{和}格式字符串

using System; 

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

理想情况下,我想,我想使用的String.format插入用户代码,并创建一个独特的类名,但我得到的格式字符串,除非例外它看起来像这样:

string formatString = @" 
using System; 

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

然后我打电话的String.format是这样的:

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

这无关紧要,我可以处理使用的丑恶{0}和{1}格式字符串代替我的大括号除了现在我的用户输入不能使用大括号。有没有办法在我的格式字符串中跳过花括号,或者是将用户代码中的花括号转换为{0}和{1}的好方法?

顺便说一句,我知道这种事情是一个等待发生的安全问题,但这是一个Windows窗体应用程序,用于在没有连接到网络的系统上内部使用,因此在这种情况下风险是可以接受的。

+0

这是一个安全问题,因为用户可能执行的代码可能是字面上的任何内容,而不是因为它连接到“网络”。 – MusiGenesis 2008-10-02 03:27:44

+0

其实不是,只是因为代码可能是任何东西都不会让用户有能力去做任何他以前无法做到的事情。该应用与用户在相同的上下文中运行,只有有权访问正在运行的计算机的人才可以引入代码。 – 2008-10-09 19:42:23

回答

5

“{{” 和 “}}”

1

双括号:string.Format("{{ {0} }}", "Hello, World");会产生{ Hello, World }

5

什么我想你想要的是...

string formatString = @" 
using System; 

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

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

对于谁有权访问应用程序,要格外小心。更好的解决方案可能是创建一个简单的解析器,只需要一些有限的命令。