在命令行参数中传递新行?

use*_*753 6 c# .net-4.0 command-line-arguments

我加载了一个小型控制台应用程序,它只是读取并打印传递给程序的第一个命令行参数到控制台.

我想将换行符传递给我试过的参数:

prog.exe \n  --> outputs \n
prog.exe "sfs \n sfff" --> outputs sfs \n sfff
prog.exe "ff \\n ff" --> outputs ff \\n ff
prog .exe "ff \\\\n ff" --> outputs ff \\\\n ff
Run Code Online (Sandbox Code Playgroud)

是否有其他逃避我想使用?或者是否有一些函数我必须调用args [0]来处理转义字符才能将其输出到控制台?

为了澄清,我正在尝试将一个字符串传递给我的程序,该程序中包含换行符.输出到控制台被用作测试.我可以轻松插入调试中断行并检查变量的内容.

N_A*_*N_A 3

您遇到的问题是从命令行获取的字符串未编译。当代码中有字符串文字时,它们会被编译,此时转义字符会被处理并转换为换行符等。您可能需要执行一些操作,例如用换行符替换输入字符串中的所有“\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;
    }
Run Code Online (Sandbox Code Playgroud)