【问题标题】:C# Quine ProblemC# 奎因问题
【发布时间】:2025-12-06 14:05:01
【问题描述】:

我试图了解这段自我复制代码是如何工作的(找到here),但问题是我无法让它按原样运行:

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 上抛出异常:索引(从零开始)必须大于或等于零且小于参数列表的大小。

有人可以帮忙吗?尤其是关于格式化选项 {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);
    }
}

【问题讨论】:

    标签: c# quine


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      原版可以用吗?

      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}用于在字符串前后加上引号。

        【讨论】: