web-dev-qa-db-fra.com

Jeton non valide '=' dans la déclaration du membre de la classe, de la structure ou de l'interface c #

c'est peut-être une question simple pour les gens, mais je ne vois pas pourquoi cela se produit. voici mon code 1er:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GameCore
{
    public class PlayerCharacter
    {

        public void Hit(int damage)
        {
            Health -= damage;

            if (Health <= 0)
            {
                IsDead = true;
            }
        }

        public int Health { get; private set; } = 100;
        public bool IsDead{ get; private set; }

    }
}

à présent, Visual Studio donne l'erreur de jeton non valide sur le signe d'affectation (=) (selon le titre) et je ne vois pas pourquoi. Quelqu'un peut-il faire la lumière sur cela s'il vous plaît?

Ce que j'essaie de faire est de régler l'int de Health à 100, et chaque fois qu'un personnage subit des dégâts, sa santé est diminuée. Merci a tous.

J'utilise Visual Studio 2013 v12.0.40629.00 mise à jour 5

6
Graeme Phillips

La définition d'une valeur par défaut pour les propriétés implémentées automatiquement n'est disponible qu'à partir de la version 6 # et plus. Avant la version 6, vous devez utiliser le constructeur et y définir la valeur par défaut:

public class PlayerCharacter {
    public int Health { get; private set; }

    public PlayerCharacter()
    {
        this.Health = 100;
    }
}

Pour activer le compilateur pour VS2013, vous pouvez utiliser cette approche .

9
HimBromBeere

Il semble que cette erreur se produise en raison de la version de votre MSBuild. L'ancienne version de MSBuild ne peut compiler que la version 4 de C #, alors que votre code est rédigé au format C # version 6 (définissez la valeur par défaut pour les propriétés). 

Exemple de code écrit en C # version 6: 

 public static string HostName { get; set; } = ConfigurationManager.AppSettings["RabbitMQHostName"] ?? "";

Pour que MSBuild puisse compiler votre code, vous devez écrire en style C # 4.

public static string HostName { get; set; }
public SomeConstructor()
        {
            HostName = ConfigurationManager.AppSettings["RabbitMQHostName"] ?? "";... }

Ou

 public static string HostName
        {
            get
            {
                return ConfigurationManager.AppSettings["RabbitMQHostName"] ?? "";
            }
        }

J'espère que ça aide

1
Hung Vu

la réponse était:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GameCore
{
    public class PlayerCharacter 
    {

        public int Health { get; private set; }

        public PlayerCharacter()
        {
            this.Health = 100;
        }


        public void Hit(int damage)
        {
            Health -= damage;


            if (Health <= 0)
            {
                IsDead = true;
            }
        }




        public bool IsDead{ get; private set; }

    }
}

faire du constructeur une fonction avec () et non pas comme PLayerCharacter {etc. 

merci à tous, je retourne dans mon trou.

0
Graeme Phillips