Как изменить значение экземпляра класса или структуры изнутри самого класса или структуры?

229
03 мая 2022, 21:40

У меня есть структура, в которой есть поле Mod, высчитываемое при инициализации:

public struct Characteristic
{
    public CharacteristicType Type;
    public int BaseScore;
    public double Mod;
    public int RacialBonus;
    public int OtherModifier;
    public bool SavingThrow;
    public Characteristic(CharacteristicType type, int score, int rBonus, int oModifier, bool saving)
    {
        Type = type;
        BaseScore = score;
        RacialBonus = rBonus;
        OtherModifier = oModifier;
        SavingThrow = saving;
        if (BaseScore + RacialBonus + OtherModifier > 10)
        {
            Mod = Math.Floor((double) (BaseScore + RacialBonus + OtherModifier - 10) / (double) 2);
        }
        else
            Mod = Math.Round((double) (BaseScore + RacialBonus + OtherModifier - 10) / (double) 2,
                MidpointRounding.AwayFromZero);
    }
}

И я хочу написать метод Up(), повышающий BaseScore на 1 с повторной инициализацией объекта, чтобы я мог написать, к примеру просто char.Up() и поле Mod изменилось согласно новому значению, но способ с this = new не работает:

    public void Up()
    {
        this = new Characteristic(Type, BaseScore + 1, RacialBonus, OtherModifier, SavingThrow);
    }

Однако работает следующий способ:

    public Characteristic Up()
    {
        return new Characteristic(Type, BaseScore + 1, RacialBonus, OtherModifier, SavingThrow);
    }

Но это не то, что мне надо, так как для изменения экземпляра мне придётся использовать переприсваивание char = char.Up(), а не просто char.Up(), как я хочу. Соответственно вопрос в том, как я могу реализовать свою задумку с переинициализацией экземпляра изнутри класса или структуры?

READ ALSO
Имя 'Ajax' не существует в текущем контексте

Имя 'Ajax' не существует в текущем контексте

Следующий код @using (AjaxBeginForm("CheckChanging", new AjaxOptions { UpdateTargetId = "results" })) вызывает ошибку CS0103 Имя "Ajax" не существует в текущем контексте

145
Как реализовать передачу пакета на UDP server?

Как реализовать передачу пакета на UDP server?

Реализовать программы клиента и сервера, работающие по протоколу UDPКлиент каждые 10 секунд отправляет на сервер пакет данных

251
Парсинг атрибута transform SVG с помощью javascript

Парсинг атрибута transform SVG с помощью javascript

Предположим, у нас есть строка преобразования SVG:

320
Скролл до нужного места

Скролл до нужного места

Такой вот вопросда, не стандартный, но интересно, на что способен JS

235