Las variables de una estructura deben asignarse definitivamente antes de poder utilizar cualquier método o propiedad. Hay dos arreglos posibles aquí:
1) Puede llamar explícitamente al constructor sin parámetros:
public A(int x) : this()
{
B = x;
}
2) Se puede utilizar el campo en lugar de la propiedad:
public A(int x)
{
b = x;
}
Por supuesto, el La segunda opción solo funciona en su forma actual - usted tiene para usar la primera opción si desea cambiar su estructura para usar una propiedad automática.
Sin embargo, es importante que ahora tenga una estructura mutable. Esto casi siempre es una muy mala idea . Me fuertemente instar a usar algo como esto en su lugar:
struct A
{
private readonly int b;
public A(int x)
{
b = x;
}
public int B { get { return b; } }
}
EDIT: Más detalles de por qué el código original no funciona ...
Desde la sección 11.3.8 de la especificación C# :
If the struct instance constructor doesn't specify a constructor initializer, the this
variable corresponds to an out
parameter of the struct type
Ahora inicialmente que no se asignaron claramente, lo que significa que no puede ejecutar ninguna función miembro (incluyendo emisores de propiedad) hasta que todas las primicias de la estructura ser constructo ed han sido definitivamente asignados. El compilador no sabe o intenta tener en cuenta el hecho de que el creador de propiedades no intenta leer desde otro campo. Es todo para evitar leer de campos que no han sido asignados definitivamente.
verifique mi respuesta, obtendrá una idea al respecto –