Aquí es una estructura que estoy tratando de escribir:Constructor de estructuras: "los campos se deben asignar por completo antes de devolver el control a la persona que llama".
public struct AttackTraits
{
public AttackTraits(double probability, int damage, float distance)
{
Probability = probability;
Distance = distance;
Damage = damage;
}
private double probability;
public double Probability
{
get
{
return probability;
}
set
{
if (value > 1 || value < 0)
{
throw new ArgumentOutOfRangeException("Probability values must be in the range [0, 1]");
}
probability = value;
}
}
public int Damage { get; set; }
public float Distance { get; set; }
}
Esto se traduce en los siguientes errores de compilación:
El 'esto' objeto no puede ser utilizado antes de que todos sus campos se asignan a
'AttackTraits.probability' el campo debe ser totalmente asignado antes del control se devueltos a la persona que llama
campo del forro para las automáticamente propiedad 'AttackTraits.Damage' implementado debe ser totalmente asignado antes se devuelve el control a la persona que llama. Considere llamar al constructor predeterminado desde un constructor inicializador.
campo del forro para las automáticamente propiedad 'AttackTraits.Distance' implementado debe ser totalmente asignado antes se devuelve el control a la persona que llama. Considere llamar al constructor predeterminado desde un constructor inicializador.
¿Qué estoy haciendo mal?
Intenté esto. no funcionó para mí, pero estoy usando propiedades automáticas –
@RogerWillcocks, simplemente llame al constructor predeterminado y luego: 'public YourStruct (algunos parámetros): this()' (vea la respuesta de vittore) –
El problema con esta solución. No tiene los beneficios de validación de la propiedad Probabilidad. Y no soluciona todo, porque también necesita cambiar 'Distance' y' Damage' a propiedades no anónimas; de lo contrario, no funcionará. Prefiero la respuesta de @ Chris-Amelinckx como una mejor solución. – hwcverwe