首页 > 解决方案 > 扩展的 GET SET 对象

问题描述

public class ZakazkandDTO
{
    private decimal? _pcPevna;
    private decimal? _sleva;
    
    public decimal? PcPevna 
    { 
        get => _pcPevna;
        set 
        { 
            _pcPevna = value; 
            if (_pcPevna.HasValue) 
                Sleva = PcSpec = 0; 
        }
    }
    
    public decimal? Sleva 
    { 
        get => _sleva; 
        set 
        { 
            _sleva = value; 
            if (_sleva.HasValue) 
                PcPevna = null; 
        }
    }
    
    public decimal? PcSpec { get; set; }
}

这是我的 DTO 对象,当我尝试设置属性 PcPevna 时它不起作用。为什么?

标签: c#

解决方案


因为设置PcPevna一个值 != null 设置Sleva为 0 并且它的 setter 又设置PcPevnanull.

将代码更改为

public decimal? PcPevna {
    get => _pcPevna;
    set {
        _pcPevna = value;
        if (_pcPevna.HasValue)
            _sleva = PcSpec = 0;
    }
}

public decimal? Sleva { 
    get => _sleva;
    set {
        _sleva = value;
        if (_sleva.HasValue)
            _pcPevna = null;
    }
}

即,直接设置支持字段以避免再次触发其他属性的设置器。


推荐阅读