it-swarm.com.ru

Недопустимый токен '=' в объявлении члена класса, структуры или интерфейса c #

это может быть простой вопрос для людей, но я не понимаю, почему это происходит. вот мой код 1-й:

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

    }
}

сейчас Visual Studio выдает ошибку Invalid token на знаке присваивания (=) (согласно заголовку), и я не могу понять, почему. Кто-нибудь может пролить свет на это, пожалуйста?

То, что я пытаюсь сделать, это установить int здоровья на 100, и каждый раз, когда персонаж получает урон, здоровье уменьшается. Спасибо всем.

Я использую Visual Studio 2013 v12.0.40629.00 обновление 5

6
Graeme Phillips

Установка значения по умолчанию для автоматически реализуемых свойств доступна только в C # -version 6 и выше. До версии 6 вы должны использовать конструктор и установить там значение по умолчанию:

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

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

Чтобы включить компилятор для VS2013, вы можете использовать этот подход .

9
HimBromBeere

Похоже, эта ошибка происходит из-за версии вашего MSBuild, старая версия MSBuild может компилировать только C # версии 4, а ваш код написан в формате C # версии 6 (установите значение по умолчанию для свойств). 

Пример написания кода в C # версии 6: 

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

Чтобы MSBuild скомпилировал ваш код, вам нужно написать в стиле C # 4

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

Или же

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

Надеюсь, поможет

1
Hung Vu

ответ был:

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

    }
}

сделать конструктор функцией с (), а не как PLayerCharacter {и т. д. 

спасибо всем, возвращаюсь в свою нору.

0
Graeme Phillips