Где тут деление на ноль и как его обойти?

127
04 августа 2019, 03:00

Есть некая база

new ItemModel("Water", 0, 1, 0),
new ItemModel("Ballast", 0, 1, 0),
new ItemModel("Oil", 0, 1, 0),

и соответственно числам есть некие формулы

private int _weight;
public int Weight
{
    get => _weight;
    set
    {
        _weight = value;
        //_volume = value / _sg;
        RaisePropertyChanged();
    }
}
private int _sg;
public int Sg
{
    get => _sg;
    set
    {
        _sg = value;
        Volume = _weight / value;
        Weight = value * _volume;
        RaisePropertyChanged();
    }
}

private int _volume;
public int Volume
{
    get => _volume;
    set
    {
        _volume = value;
        _weight = value * _sg;
        RaisePropertyChanged();
    }
}

меня интересует данный момент

_volume = value / _sg;

так как по сути формула - 0=0/1 но компилятор выдаёт мне запрет деления на ноль

class ItemModel
{
    public ItemModel(string name, int weight, int sg, int volume)
    {
        Name = name;
        Weight = weight;
        Sg = sg;
        Volume = volume;
    }
    public string Name { get; set; }
    public int Weight { get; set; }
    public int Sg { get; set; }
    public int Volume { get; set; }
}
Answer 1
ItemModel("Water", 0, 1, 0)

Если инициализация свойств идет в таком порядке: Weight, Sg, Volume, то при инициализации Weight должен быть инициализирован Sg :

private int _weight;
public int Weight
{
    get => _weight;
    set
    {
        _weight = value;
        //_volume = value / _sg; здесь _sg еще не инициализирован и равен 0.
        RaisePropertyChanged();
    }
}

Наилучшим решением будет, присваивать параметры не через сеттер, а сразу полям:

_weight = argWeght;
_sg = argSg;
_volume = argValue;

дальше:

private int _weight;
public int Weight
{
    get { return _weight; } 
    set
    {
        _weight = value;  
        _volume = value / _sg;
        //т.к. все свойства зависят друг от друга, то необходимо оповестить их об изменении           
        RaisePropertyChanged("Weight");
        RaisePropertyChanged("Value");
        RaisePropertyChanged("Sg");
    }
}
public ItemModel(string name, int weight, int sg, int volume)
{
   _name = name;
   _weight = weght;
   _sg = sg;
   _volume = volume;
}

и с остальными свойствами проделать такие же манипуляции

READ ALSO
Неверное количество индексов в массиве

Неверное количество индексов в массиве

Задача из двумерного массива вытаскивать его элементы в виде массивов

103
Сериализация в C# объектов, имеющих взаимные ссылки

Сериализация в C# объектов, имеющих взаимные ссылки

Подскажите, пожалуйста, как правильно сериализовывать/десериализовывать объекты в XML, имеющие взаимные ссылкиНапример, есть классы Car и Garage

84
Запрос данных из двух таблиц и вывод через while

Запрос данных из двух таблиц и вывод через while

Есть две таблицы comments и usersОни связаны между собой

127