111 votes

Struct constructeur : « champs doivent être entièrement affectées avant que le contrôle est retourné à l’appelant. »

Voici une struct je suis en train d'écrire:

  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; }
        }

Cette résultats dans la suite des erreurs de compilation:

Le " il " de l'objet ne peut pas être utilisé avant tous ses champs sont affectés pour

Champ 'AttackTraits.probabilité " doit être entièrement attribué, avant que la commande est retourné à l'appelant

Champ de stockage pour automatiquement mise en œuvre de la propriété 'AttackTraits.Les dommages doivent être pleinement attribué, avant que la commande est renvoyée à l'appelant. Pensez à téléphoner à l' constructeur par défaut à partir d'un constructeur initialiseur.

Champ de stockage pour automatiquement mise en œuvre de la propriété 'AttackTraits.Distance doivent être pleinement attribué, avant que la commande est renvoyée à l'appelant. Pensez à téléphoner à l' constructeur par défaut à partir d'un constructeur initialiseur.

Ce que je fais mal?

311voto

Chris Amelinckx Points 1304

Si vous voyez cette erreur sur un struct qui possède une propriété automatique, suffit d’appeler le constructeur sans paramètre de ton paramétrable en faisant `` exemple ci-dessous :

51voto

vittore Points 8364

essayez de probabilité d'accès de terrain pas d'accesseur. dans ce cas autoprops devrait fonctionner aussi bien. Aussi il n'existe aucun moyen pour struct avoir paramless constructeur d'envisager de changer de classe à la place. Il y a une règle que l'on devrait utiliser les structures que s'ils ne sont pas plus grand que 16 octets et sont immuables. Donc, si vous allez à modifier les champs d'objet après la création de changer de classe. vous pouvez également modifier le costructor définition de

construct(params) : this()

dans ce cas, vous n'aurez pas cette ainsi des erreurs

32voto

Thomas Levesque Points 141081

Vous voulez régler la champ à travers le propriété, mais le compilateur ne sait pas que la propriété définit le champ... il faut initialiser explicitement le champ de probabilité elle-même

2voto

David Morton Points 10519

Modifiez la ligne « probabilité = probabilité » à « this.probability = probabilité »

À l’avenir prendre une convention de nommage différente pour les champs comme vous le faites pour les paramètres. Par exemple, le préfixe tous les champs avec un trait de soulignement, vous pouvez appeler simplement ceci :

et voir facilement ce qui se passe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X