代码之家  ›  专栏  ›  技术社区  ›  Jon Norton

如何将和放入格式字符串[重复]

  •  21
  • Jon Norton  · 技术社区  · 16 年前

    我试图在运行时生成一些代码,在那里我放入一些锅炉盘的东西,用户可以输入实际的工作代码。我的锅炉板代码如下所示:

    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 entireClass = string.Format(formatString, "{", "}", userInput);
    

    这很好,我可以处理在格式字符串中使用0和1代替大括号的丑陋问题,但现在我的用户输入也不能使用大括号。有没有一种方法可以避开格式字符串中的大括号,或者一种将用户代码中的大括号转换为0和1的好方法?

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

    5 回复  |  直到 16 年前
        1
  •  38
  •   John Millikin    16 年前

    通过将它们加倍来逃避它们:

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

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

        2
  •  5
  •   Mark Cidade    16 年前

    “{”和“}”

        3
  •  5
  •   Elijah Manor    16 年前

    我想你想要的是…

    string formatString = @"
    using System;
    
    public class ClassName
    {{
        public double TheFunction(double input)
        {{
            {0}
        }}
    }}";
    
    string entireClass = string.Format(formatString, userInput);
    
        4
  •  1
  •   jop    16 年前

    将支架加倍: string.Format("{{ {0} }}", "Hello, World"); 会产生 { Hello, World }

        5
  •  0
  •   Luk    16 年前

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