微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

[CSharp]传一个包含多个属性的对象,只改变其中个别属性值的方法

需求

假如有这么一个需求,一个对象Person内的属性设置外包给了另外一个Options

而要设这个Person对象的属性,就必须传一个Options实例,

但又不能每个属性重新设一遍,只设要修改属性

public class Options
{
    public string Name { get; set; } = "";
    public int Age { get; set; } = 0;
    public string Gerder { get; set; } = "";
}

public class Person
{
    public void Setoptions(Options options)
    {
        // 思考一下这里的实现方式
    }
    private Options myOpts = new Options();
}
var p = new Person();

var opts = new Options()
{
    Name = "Hepburn",
    Age = 18,
    Gerder = "Female"
};

p.Setoptions(opts);

/*
 * p
 *  |_Name: Hepburn
 *  |_Age: 18
 *  |_Gender: Female
 *  

    p.Setoptions(new Options() { Age = 19 });

 *  ↓↓↓
 *  
 * p
 *  |_Name: Hepburn
 *  |_Age: 19
 *  |_Gender: Female
 *  
*/

p.Setoptions(new Options() { Age = 19 });

  • 答案区

public void Setoptions(Options options)
{
        foreach (var p in options.GetType().GetProperties())
        {
            if(!p.CanWrite) continue;

            var value = p.GetValue(options);

            var valDefault = p.GetValue(new Options());

            if(value != valDefault)
            {
                p.SetValue(myOpts, value);
            }
        }
}

这样,任何有指定值的时候都会被设上,同时,要求认值都是没有意义的,比如 -1(负一),null 等,因为,设过一次之后,通过这种方法就再也改不回认值了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐