Информация об изменениях

Сообщение Где баг в рантайме или в компиляторе? от 30.03.2016 21:55

Изменено 30.03.2016 22:08 VladD2

Приведенный ниже код успешно компилируется, но при запуске получаем:

TypeLoadException: Could not load type 'D'

Вот код.
struct A<T> { }

struct D
{
  public A<D> ar;
}

class Program
{
  static void Main(string[] args)
  {
    System.Console.WriteLine(new D().ar); ;
  }
}


С одной стороны D используется в параметре типа структуры вложенной D, т.е. имеем рекурсивное определение структуры.

Но с другой ведь параметр типа не использован нигде в A или может быть использован для задания параметра типа у ссылочного типа (т.е. не приводит к проблеме рекурсии).

Короче, вопрос: где баг, в компиляторе (который не сообщает об ошибке) или в рантайме, который вылетает не по делу?
Где баг в рантайме или в компиляторе?
Приведенный ниже код успешно компилируется, но при запуске получаем:

TypeLoadException: Could not load type 'D'

Вот код.
struct A<T> { }

struct D
{
  public A<D> ar;
}

class Program
{
  static void Main()
  {
    System.Console.WriteLine(new D().ar); ;
  }
}


С одной стороны D используется в параметре типа структуры вложенной D, т.е. имеем рекурсивное определение структуры.

Но с другой ведь параметр типа не использован нигде в A или может быть использован для задания параметра типа у ссылочного типа (т.е. не приводит к проблеме рекурсии).

Короче, вопрос: где баг, в компиляторе (который не сообщает об ошибке) или в рантайме, который вылетает не по делу?