Error # CS0176 in if statement, what am I doing wrong?

3

Why am I getting error # CS0176 when I call the variable madeiras in (gamble.Equals("gamble {0}", madeiras)) ?

By what I understand is because my method is static, and I need to put the name of your class, but the error persists if I put (gamble.Equals("gamble {0}", Program.madeiras)) , for example.

 namespace GambleGame
 {
    class Program
    {   
        //váriaveis em int
        static int madeiras = 0;

        //váriaveis em string
        static string gamble;


        static void Main(string[] args)
        {
            //método principal
            //...
            //Gamble Game
            //cor da intro
            Console.ForegroundColor = ConsoleColor.Green; 

            //executa o método estático "intro"
            intro();
        }

        public static void intro()
        {
            //código do método estático intro
            Console.WriteLine("---------------------------|||Seja bem vindo ao Gamble Game|||---------------------------");

            {  
                //cor das intruções
                Console.ResetColor();
                Console.ForegroundColor = ConsoleColor.Yellow;
            }

            Console.WriteLine("- Intruções:");     
            Console.WriteLine("- Digite ''gamble'' para farmar 10 madeiras");
            Console.WriteLine("- Para apostar ''X'' madeiras, digite ''apostar'' e o número de madeiras");
            Console.WriteLine("- Você poderá apostar ''X'' madeiras para ganhar a mesma quantidade");
            Console.WriteLine("- Porém, se você apostar ''X'' madeiras e perder, você perde essa mesma quantidade");
            Console.WriteLine("- Tente ser o maior lenhador dentre seus amigos, boa sorte !");
            Console.WriteLine("- Aperte Enter para começar !");
            Console.ReadLine();
            Console.Clear();
            start(); //executa o método estático "start"
        }

        public static void start()
        {
            {
                //cor do start
                Console.ResetColor();
                Console.ForegroundColor = ConsoleColor.Cyan;
            }

            // loop for(int loop = 0; loop < 999*999; loop++)
            //código do método start
            Console.WriteLine("Digite ''gamble'' para bater na árvore");
            Console.WriteLine("Você possui {0} madeiras", madeiras);

            bool loop = true;

            while (loop)
            {
                gamble = Console.ReadLine();

                if (gamble.Equals("gamble"))
                {
                    madeiras = madeiras + 10;
                    Console.Clear();
                }
                else
                {
                    Console.Clear();
                    Console.WriteLine("Digite ''gamble'' para bater na árvore");
                }

                if (gamble.Equals("gamble {0}", madeiras))
                {
                    madeiras = madeiras + madeiras;
                }
                Console.WriteLine("Você possui {0} madeiras", madeiras);
            }           
        }
    }
}
    
asked by anonymous 27.08.2018 / 19:03

2 answers

3

The error is due to the fact that the String class has a static method with this signature ( public static bool Equals (string, string) ) and be qualified with an instance name.

To use it, you must qualify with the class name:

String.Equals("gamble {0}", madeiras);

This will compare the string "gamble {0}" with the contents of the madeiras variable.

What is meant is not what you intend, but rather:

gamble.Equals(string.Format("gamble {0}", madeiras))

or, even better, using "string interpolation":

gamble.Equals($"Texto {madeiras}")
    
27.08.2018 / 19:16
4

On the face of it I see that the loop is infinite, even using a variable without necessity. You need to see how it will come out of it, I doubt that's the intention.

It's not a bug, but using Equals() in C # does not make sense. Other things can be modernized. The comments are very unnecessary, they add zero useful information. The code is pretty confusing and does not use C # naming pattern. And it does not do validations and error treatments.

Static variables do not make sense because they are used only locally.

And mostly it has parts that do not make sense.

The error is documented :

  

Static member 'member' can not be accessed with an instance reference; qualify it with a type name instead

I got better and I got there, but it's still weird and I do not know if it's what you want, the question does not describe the problem properly, I just gave a way to compile and then see the other errors:

using static System.ConsoleColor;
using static System.Console;

namespace GambleGame {
    public class Program {
        public static void Main(string[] args) {
            ForegroundColor = Green;
            Intro();
        }

        public static void Intro() {
            //código do método estático intro
            WriteLine("---------------------------|||Seja bem vindo ao Gamble Game|||---------------------------");
            ResetColor();
            ForegroundColor = Yellow;
            WriteLine("- Intruções:");
            WriteLine("- Digite ''gamble'' para farmar 10 madeiras");
            WriteLine("- Para apostar ''X'' madeiras, digite ''apostar'' e o número de madeiras");
            WriteLine("- Você poderá apostar ''X'' madeiras para ganhar a mesma quantidade");
            WriteLine("- Porém, se você apostar ''X'' madeiras e perder, você perde essa mesma quantidade");
            WriteLine("- Tente ser o maior lenhador dentre seus amigos, boa sorte !");
            WriteLine("- Aperte Enter para começar !");
            ReadLine();
            Clear();
            Start(); //executa o método estático "start"
        }

        public static void Start() {
            ResetColor();
            ForegroundColor = Cyan;
            int madeiras = 0;
            WriteLine("Digite ''gamble'' para bater na árvore");
            WriteLine($"Você possui {madeiras} madeiras");
            while (true) {
                var gamble = ReadLine();
                if (gamble == "gamble") {
                    madeiras += 10;
                    Clear();
                } else {
                    Clear();
                    WriteLine("Digite ''gamble'' para bater na árvore");
                }
                if (gamble == $"gamble {madeiras}") {
                    madeiras += madeiras;
                }
                WriteLine($"Você possui {madeiras} madeiras");
            }
        }           
    }
}
    
27.08.2018 / 19:26