C # Quine Проблема - PullRequest
       17

C # Quine Проблема

5 голосов
/ 19 ноября 2009

Я пытаюсь понять, как работает этот фрагмент самовоспроизводящегося кода (найдено здесь ), но проблема в том, что я не могу запустить как есть

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

У меня получилось так (см. Ниже), но оно длиннее оригинала - мне любопытно, как оригинал мог работать как есть на 1-м месте:

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

Ответы [ 3 ]

11 голосов
/ 19 ноября 2009

Я думаю, что отсутствует пара скобок - вместо {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

    }
}
5 голосов
/ 19 ноября 2009

Может ли оригинальная работа с?

s={0}{1}{0}
4 голосов
/ 19 ноября 2009

Я считаю, что оригинал должен был выглядеть так:

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} в строке формата используется для установки кавычек до и после строки.

...