将属性添加到列表或集合中

Adding Properties into a List or Collection

我遇到过这样一种情况,我可能需要在列表中添加属性(class)以手动调用它们(或者你可以说,我需要在那里分配值(setter)).这就是为什么,我什至不知道要设置哪些属性的值,但它们是在运行时决定的。到目前为止,我正试图在这里和那里找到解决方案,但我仍然没有得到任何文章甚至暗示我可以为此目的进行解决。 这正是我想要做的(作为评论提及)-

public class DemoClass
{
    IList<Properties> _listOfProps;
    private int _iFirstProperty;
    private string _iSecondProperty;

    public DemoClass()
    {
        _listOfProps = new List<Properties>();
    }


    public int FirstProperty
    {
        get
        {
            return _iFirstProperty;
        }
        set
        {
            _iFirstProperty = value;
            // Here I want to add this property into the list.
            _listOfProps.Add(FirstProperty);
            RaisePropertyChanged("FirstProperty");
        }
    }

    public string SecondProperty
    {
        get
        {
            return _iSecondProperty;
        }
        set
        {
            _iSecondProperty = value;
            RaisePropertyChanged("SecondProperty");
        }
    }

    public void HandleChangedProperties()
    {
        foreach (var list in _listOfProps)
        {
            // Here I want to invoke the property. ie. sets the 'value' of this property.
            list.Invoke(value)
        }
    }
}

我知道,我可以使用 Func 在列表中添加 - 但我不能这样做。

List<Func<int>> listOfFunc = new List<Func<int>>();
listOfFunc.Add(() => { return 0; }); // Adds using lambda expression
listOfFunc.Add(temp); // Adds as a delegate invoker

private int temp()
{
    return 0;
}

来自 MSDN

Properties can be used as if they are public data members, but they are actually special methods called accessors.

如果属性是内部方法,为什么它们不能添加为 List of Func<>
此外,如果不使用反射(通过获取 PropertyInfo 列表)我无法做到这一点,为什么 Microsoft 没有在 C# 中设计它?

您可以保留 PropertyInfo 个值的列表,然后使用反射设置属性的值,或者您可以保留 setter 个委托的列表(实际上只是将值转发给真实的,隐藏的 setter).

例如:

IList<Action<object>> listOfSetters;

listOfSetters.Add(o => this.FirstProperty = (int)o);

// and then:
listOfSetters[0](42); // FirstProperty = 42