Обобщения, используемые в структуре против класса

Предположим, что у нас есть следующееstruct определение, которое использует дженерики:

public struct Foo<T>
{
    public T First; 
    public T Second;

    public Foo(T first)
    {
        this.First = first;
    }

}

Компилятор говорит

'Foo.Second' должен быть полностью назначен до того, как управление будет возвращено вызывающей стороне.

Однако еслиFoo&nbsp;это класс, то он успешно компилируется.

public class Foo<T>
{
    public T First; 
    public T Second;

    public Foo(T first)
    {
        this.First = first;
    }

}

Почему? Почему компилятор относится к ним по-разному? Более того, если конструктор не определен в первомFoo&nbsp;тогда это компилируется. Почему это поведение?