c# - 在 setter 中更改 value 关键字是错误的吗?

标签 c#

我有一个 setter 需要用旧值处理新值。 但是,如果该值 < 0.1,则需要将其设置为 0.1。

我可以基于 value 关键字创建一个 newValue 变量,但这看起来有点浪费,而且在处理部分中,newValue 是什么并不是很明显。

同样,如果我查看代码,我希望“值”是传递给 setter 的东西,而不是被操纵的东西。

最好的写法是什么,是使用 newValue 还是 value 关键字?

public double NumberValue
{
    get => _numberValue;
    set
    {
        if (value < 0.1) value = 0.1;

        var multiplier = value / _numberValue;
        foreach (var item in Items)
        {
            item.SomeValue = item.SomeValue * multiplier;
        }
        _numberValue = value;
    }
}

我的方法是这样结束的,这是一个更简洁的解决方案

public double NumberValue
{
    get { return _numberValue; }
    set
    {                
        var newValue = Math.Max(0.1, value);
        ProcessValues(newValue);
        _numberValue = newValue;        
    }
}

最佳答案

这是我会做的:

public double NumberValue
{
    get => _numberValue;
    set
    {
        _numberValue = value < 0.1 ? 0.1 : value;
    }
}

@Matthew 在评论中建议的另一种方法是使用 Math.Max :

public double NumberValue
{
    get => _numberValue;
    set
    {
        _numberValue = Math.Max(0.1, value);
    }
}

关于c# - 在 setter 中更改 value 关键字是错误的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55064933/

相关文章:

c# - ConfigurationSettings.AppSettings 已过时,警告

c# - 求总和并添加概率标度

c# - ASP Core 违反了 String 类型参数 'TRole' 的约束

c# - C#中的连续字母

c# - 如何使用 signalr 将 json 对象发送到 .net 服务器

c# - 从列表中检索第一项

c# - 尝试使用中继器填​​充表格

c# - c#构造函数的问题

c# - 如何在c#中的listview项目的特定行中插入数据?

c# - 在 C# 中表示结构