Случайное число место в собственности - PullRequest
0 голосов
/ 31 января 2020

Я новичок ie в C#, и я играю с игрой в кости. У меня есть проблема, чтобы поместить случайное значение int в свойство. Пробовал разные варианты, но ни один из них не работал, просто получил более или менее красные волнистые линии под текстом.

Как я могу поместить результаты этой случайной операции в свойство Amount? Гугл мне не помог после 1,5 часа поиска. Где проблема?

using System;
using System.Collections.Generic;
using System.Text;
using static System.Random;

namespace DiceRollGame
{
    class Dice
    {
        private static Random randomnumber = new Random();

        public int Amount
        {
            get
            {
                return Amount;
            }

            set
            {
                Amount = value;
            }
        }
        public int ThrowAmount { get; set; }

        public Dice(int throwamount)
        {
            ThrowAmount = 0;
        }

        public static void Throw()
        {

            int numbervalue = randomnumber.Next(1, 6);

            Amount = int numbervalue;

        }

    }
}

Ответы [ 3 ]

0 голосов
/ 31 января 2020

Попробуйте:

class Dice
{
    private readonly Random rnd;
    public int Amount { get; set; }
    public int ThrowAmount { get; set; }
    public Dice() => rnd = new Random();
    public void Throw() => Amount = rnd.Next(1, 7); //Random() max value is exclusive
}

Использование:

Dice d = new Dice();
d.Throw();
Console.WriteLine(d.Amount);
0 голосов
/ 31 января 2020

Использовать свойство с полем поддержки:

private int _amount;
public int Amount
{
    get
    {
        return _amount;
    }

    set
    {
        _amount = value;
    }

}

И вам не следует обращаться к свойствам из контекста stati c, поэтому метод Throw() не должен быть stati c :

public void Throw() 
{
    _amount = RandomInstance.Next(1, 6);
}

И последнее. Лучше инициировать экземпляр Random с помощью класса Dice (не stati c) с помощью конструктора:

public Dice()
{
    RandomInstance = new Random();
}
0 голосов
/ 31 января 2020

Ключевое слово int требуется только при объявлении переменной. Следовательно, это просто

Amount = numbervalue;

Более того, ваша собственность не так. Вам нужно будет создать личную переменную, в которой вы сохраните значение в:

private int _amount;
public int Amount
    {
        get
        {
            return _amount;
        }

        set
        {
            _amount = value;
        }
    }

Если у вас нет дополнительных логик c в вашем свойстве, тогда для получения и установки значения вы также можете использовать autoproperty:

public int Amount { get; set;}

В этом случае компилятор создаст для вас приватную переменную, и вы сохраните некоторую типизацию и будете иметь меньше возможных источников ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...