如何遍历有限的实例属性集

本文关键字:实例 属性 何遍历 遍历 | 更新日期: 2023-09-27 18:02:59

我有一个具有大量属性的类,但我只想更改其中的几个。你能建议我如何实现以下功能吗?

var model = session.Load<MyType>(id);
foreach(var property in [model.RegistrationAddress, model.ResidenceAddress, model.EmploymentAddress, model.CorrespondenceAddress])
{
    // alter each of the given properties...
}

如何遍历有限的实例属性集

当将其包装在object[]中时,您可以获得所有值,但您失去了对其背后属性的了解。

foreach( var property in
            new object[]
            { model.RegistrationAddress
            , model.ResidenceAddress
            , model.EmploymentAddress
            , model.CorrespondenceAddress
            }
       )
{
    // alter each of the given properties...
}

您可以使用Dictionary代替:

当你把它包装在一个object[]中时,你可以得到所有的值,但是你失去了它背后的属性的知识。

foreach( KeyValuePair<string, object> property in 
            new Dictionary<string, object>
            { { "RegistrationAddress", model.RegistrationAddress}
            , { "ResidenceAddress", model.ResidenceAddress } ...
            }
        )
{
    // alter each of the given properties...
}

理想情况下,在c#的下一个版本中,您可以使用nameof:

            new Dictionary<string, object>
            { { nameof(RegistrationAddress), model.RegistrationAddress}
            , { nameof(ResidenceAddress), model.ResidenceAddress } ...
            }

当你需要设置参数时,你可以这样使用:

public class GetSet<T>
{
    public GetSet(Func<T> get, Action<T> set)
    {
        this.Get = get;
        this.Set = set;
    }
    public Func<T> Get { get; set; }
    public Action<T> Set { get; set; }
}

这样写:

ClassX x = new ClassX();
foreach (var p in new GetSet<string>[] { new GetSet<string>(() => { return x.ParameterX; }, o => { x.ParameterX = o; }) })
{
    string s = p.Get();
    p.Set("abc");
}