您遇到的问题是您从命令行获得的字符串没有被编译。当您的代码中有字符串文字时,它们会被编译,这是处理转义字符并将其转换为换行符等的时候。您可能需要做一些事情,例如用换行符替换输入字符串中的所有“\n”实例。
编辑:
从这里开始(稍作修改),这将使用 CSharp 编译器编译您的字符串,从而用适当的字符替换转义序列:
public static string ParseString(string input)
{
var provider = new Microsoft.CSharp.CSharpCodeProvider();
var parameters = new System.CodeDom.Compiler.CompilerParameters()
{
GenerateExecutable = false,
GenerateInMemory = true,
};
var code = @"
public class TmpClass
{
public static string GetValue()
{
return """ + input + @""";
}
}";
var compileResult = provider.CompileAssemblyFromSource(parameters, code);
if (compileResult.Errors.HasErrors)
{
throw new ArgumentException(compileResult.Errors.Cast<System.CodeDom.Compiler.CompilerError>().First(e => !e.IsWarning).ErrorText);
}
var asmb = compileResult.CompiledAssembly;
var method = asmb.GetType("TmpClass").GetMethod("GetValue");
return method.Invoke(null, null) as string;
}