Los genéricos utilizados en la estructura vs clase

Supongamos que tenemos los siguientesstruct definición que utiliza genéricos:

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

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

}

El compilador dice

'Foo.Second' debe estar completamente asignado antes de devolver el control a la persona que llama

Sin embargo, siFoo Es una clase, luego se compila exitosamente.

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

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

}

¿Por qué? ¿Por qué el compilador los trata de manera diferente? Además, si no se define ningún constructor en la primeraFoo entonces se compila. ¿Por qué este comportamiento?

Respuestas a la pregunta(4)

Su respuesta a la pregunta