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
}
}
Он генерирует исключение на writeeline: индекс (на основе нуля) должен быть больше или равен нулю и меньше размера списка аргументов.
Может ли кто-нибудь помочь - в частности, о параметре форматирования {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);
}
}
3 ответа
Решение
Я думаю, что пара скобок отсутствует - вместо {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
}
}
Я считаю, что оригинал должен был выглядеть так:
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}
в строке формата используется для кавычек до и после строки.