你可以澄清一下你的问题。这对我来说太模糊了。
你在找这个吗?
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
,您的代码将在运行时中断,因为您很容易忘记重写函数的字符串参数。对于其他版本,至少编译器会为您提供错误。
如果您提供更多信息,我可以写更具体的答案。