Genéricos usados ​​em struct vs class

Suponha que temos os seguintesstruct definição que usa genéricos:

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

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

}

O compilador diz

'Foo.Second' deve ser totalmente atribuído antes que o controle seja retornado ao chamador

No entanto, seFoo é uma classe, então compila com sucesso.

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

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

}

Por quê? Por que o compilador os trata de maneira diferente? Além disso, se nenhum construtor for definido no primeiroFoo então compila. Por que esse comportamento?

questionAnswers(4)

yourAnswerToTheQuestion