C#Quine问题

Joh*_*dol 6 c# quine

我试图理解这段自我复制代码是如何工作的(在这里找到),但问题是我不能让它按原样运行:

class c {
    static void Main(){

        string s = "class c{{static void Main(){{string s={0}{10};System.Console.Write(s,(char)34,s);}}}}";

        System.Console.Write(s,(char)34,s); //<<-- exception on this line

    }
}
Run Code Online (Sandbox Code Playgroud)

它在writeline上抛出异常:Index(从零开始)必须大于或等于零且小于参数列表的大小.

有人可以提供帮助 - 尤其是格式化选项{0} {10}吗?

我得到了这样的工作(见下文),但它比原来更长 - 我很好奇原作如何在第一位起作用:

class c {
    static void Main(){

        string s = "class c{{static void Main(){{string s={0}{1}{2};System.Console.Write(s,(char)34,s,(char)34);}}}}";

        System.Console.Write(s,(char)34,s,(char)34);
    }
}
Run Code Online (Sandbox Code Playgroud)

Boj*_*nik 12

我认为有一对牙箍缺失 - 而不{10}应该阅读{1}{0}.

class c {
    static void Main(){

        string s = "class c{{static void Main(){{string s={0}{1}{0};System.Console.Write(s,(char)34,s);}}}}";

        System.Console.Write(s,(char)34,s); //<<-- exception on this line

    }
}
Run Code Online (Sandbox Code Playgroud)


rsp*_*rsp 5

原来可以用吗?

s={0}{1}{0}
Run Code Online (Sandbox Code Playgroud)


Guf*_*ffa 5

我相信原版应该是这样的:

class c {
  static void Main() {
    string s = "class c{{static void Main(){{string s={0}{1}{0};System.Console.Write(s,(char)34,s);}}}}";
    System.Console.Write(s, (char)34, s);
  }
}
Run Code Online (Sandbox Code Playgroud)

{0}{10}应该只是更改为{0}{1}{0}.

{0}格式字符串是用来放引号前和后弦。