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 } } 

它在writeline上抛出exception: 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); } } 

我认为缺少一对括号 – 而不是{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 } } 

原来可以用吗?

 s={0}{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); } } 

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

格式字符串中的{0}用于在字符串之前和之后放置引号。