1

下面是我目前的情况......

public string Zip { get { return this.GetValue<string>("Zip"); } set { this.SetValue("Zip", value); } }

我想使用反射使这个动态。如,将属性的类型和名称传递给方法。我不确定如何去做,或者是否有可能。谢谢你的帮助。

编辑:感谢 KooKiz,我能够更进一步,但仍然不是 100%。

public string Zip { get { return this.GetValue<string>(); } set { this.SetValue(value); } }
4

1 回答 1

1

你可以澄清一下你的问题。这对我来说太模糊了。

你在找这个吗?

public object DoSomething(Type type, string propertyName)
{
     var somethingWithProperty = Activator.CreateInstance(type, null);
     foreach (PropertyInfo property in somethingWithProperty.GetType().GetProperties())
     {
        if (property.Name == propertyName)
        {
            return property.GetValue(somethingWithProperty, null);
        }
     }

    throw new ArgumentException(string.Format("No property was found was found with this on [{0}] with propertyname [{1}]", type, propertyName));
}

或这个?

    public object DoSomething(Func<object> propertyStuff)
    {
        return propertyStuff();
    }

用法:

public void FinallyIDoSomethingWithThatSomething()
{
    // first version
    DoSomething(typeof(StrangeOtherClass), "MyLittleProperty");

    // second version
    DoSomething(() => new StrangeOtherClass().MyLittleProperty);
    DoSomething(() => MyPropertyInMyOwnClass);
}

由于代码美化器显示属性的颜色错误,我将提供它们:

public string MyPropertyInMyOwnClass { get { return "Yay or nay."; } }

请注意,第二个版本对重构更友好在第一个版本中,当您重构StrangeOtherClass和重命名时MyLittleProperty,您的代码将在运行时中断,因为您很容易忘记重写函数的字符串参数。对于其他版本,至少编译器会为您提供错误。

如果您提供更多信息,我可以写更具体的答案。

于 2013-10-09T16:01:19.790 回答