2009-11-19 40 views
2

我想了解这片自我复制的代码工作(发现here),但问题是我不能让它跑原样C#奎因问题

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 

    } 
} 

它在写入线上抛出异常:索引(基于零)必须大于或等于零且小于参数列表的大小。

有人可以帮忙 - 特别是格式化选项{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); 
    } 
} 

回答

7

我觉得有一对大括号缺少的 - 而不是{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 

    } 
} 
+0

像charme的作品 - 你是男人 – JohnIdol 2009-11-19 12:53:41

4

莫非原来的工作, ?

s={0}{1}{0} 
3

我相信,原来是应该是这样的:

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}用于在字符串之前和之后放置引号。