Invalid token '=' in class, struct, or interface member declaration c#

30,419

Solution 1

Settting a default-value for auto-implemented properties is only available from C#-version 6 and upwards. Before Version 6 you have to use the constructor and set the default-value there:

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

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

To enable the compiler for VS2013 you may use this approach.

Solution 2

It looks like this error happens due to version your MSBuild, old version of MSBuild can only compile C# version 4, while your code written in C# version 6 format (set default value for properties).

Example of code writing in C# version 6:

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

For MSBuild to compile your code, you need to write in C# 4 style

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

Or

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

Hope it helps

Share:
30,419
Graeme Phillips
Author by

Graeme Phillips

By Day: Software Tester of over 10 years experience in both manual and automation using Selenium Webdriver (java) and BDD Cucumber & Calabash. Some TDD using basic Ruby. By Night: Drummer, Guitarist and general nerdy layabout.

Updated on July 09, 2022

Comments

  • Graeme Phillips
    Graeme Phillips almost 2 years

    this may be a simple question for people, but I can't see why this is occurring. here is my code 1st:

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

    now Visual studio is giving the Invalid token error on the assignment sign (=) (as per the title), and I can not see why. can anyone shed light on this please?

    What I'm trying to do is set the int of Health to 100, and each time a character takes damage, then Health is decreased. Thanks all.

    I'm using Visual Studio 2013 v12.0.40629.00 update 5

  • Graeme Phillips
    Graeme Phillips about 8 years
    thanks HimBromBeere - but where do I place that in the code I've copied in the main question above? sorry bit of a noob, just learning. go easy, thanks. Graeme
  • MakePeaceGreatAgain
    MakePeaceGreatAgain about 8 years
    Directly into the PlayerCharacter-class, prefereably at its top.
  • Graeme Phillips
    Graeme Phillips about 8 years
    hi HimBromBeere - I think ive done something wrong... here is the new code, which it doesn't like at all, sorry. 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; } } }
  • Graeme Phillips
    Graeme Phillips about 8 years
    sorry, but totally lost now.. If I try that, then I get 7 errors instead of 1 error.
  • Graeme Phillips
    Graeme Phillips about 8 years
    the Health variable only show intellisense within the Hit method.
  • Nyerguds
    Nyerguds about 8 years
    public PlayerCharacter is your class constructor, not a property. It's a function; it needs () behind the name.
  • Graeme Phillips
    Graeme Phillips about 8 years
    thank you very much Nyerguds... making it a function has worked! 100%
  • Jesus Campon
    Jesus Campon over 5 years
    This comment helped me more than the above, because I could build my project with no issues from my VS2017 on my computer, but I got this build failure on our CI system (TeamCity) afterwards, which was using an older version of MSBuild to build the project. So reverting the C# 6.0 property autoinitialization to an older C# syntax compatible with that MSBuild sorted out that issue - and pointed me towards the need to update our TeamCity infrastructure!
  • David C Fuchs
    David C Fuchs almost 4 years
    Was pulling my hair out over this, thanks for the lead. Windows flaked out and swapped from VS 2015 to VS 2013 on me. Your answer gave me the solution, set VS 2015 as default ....