Недопустимый маркер ' = ' в объявлении класса, структуры или члена интерфейса 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 дает недопустимую ошибку токена на знаке назначения ( = ) (согласно заголовку), и я не могу понять, почему. кто-нибудь может пролить свет на это, пожалуйста?
то, что я пытаюсь сделать, это установить int здоровья на 100, и каждый раз, когда персонаж получает урон, то здоровье уменьшается. Спасибо всем.
Я использую Visual Studio V12 в 2013.0.40629.00 обновление 5
3 ответов
настройка значения по умолчанию для автоматически реализованных свойств доступна только в C# - версии 6 и выше. Перед версией 6 Вы должны использовать конструктор и установить там значение по умолчанию:
public class PlayerCharacter {
public int Health { get; private set; }
public PlayerCharacter()
{
this.Health = 100;
}
}
чтобы компилятор VS2013 вы можете использовать этот подход.
ответ был:
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{ etc.
спасибо всем, я возвращаюсь в свою дыру.
похоже, что эта ошибка происходит из-за версии вашего 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"] ?? "";
}
}
надеюсь, что это помогает