如果在运行时将所需属性的名称作为字符串提供,C#中的对象是否可以返回其某个属性的值?
myObject["price"]
假设我们有这个对象:
public class Widget
{
public Widget(){}
public DateTime productionDate {get;set;}
public decimal price {get;set;}
}
和这个SqlCommand参数定义:
SqlCommand c = new SqlCommand();
c.Parameters.Add(new SqlParameter("@price", SqlDbType.SmallMoney,0,"price"));
在其他范围的代码中,用户单击了[Save Record]
按钮,现在我们需要将widget对象中的值绑定到update命令的参数。我们在变量command
中引用了SqlCommand:
foreach (SqlParameter p in command.Parameters)
{
// assume `parameter.SourceColumn` matches the widget attribute name
string attributeName = p.SourceColumn;
p.Value = widget[attributeName] // ??
}
答案 0 :(得分:1)
加入Crowcoder:
您可以使用反射并调用Type.GetProperty(" nameOfProperty")来获取可以调用GetMethod属性的PropertyInfo。
GetMethod属性返回一个MethodInfo,您可以在其上调用Invoke方法来检索属性的值。
例如:
var propertyInfo = myObject.GetType().GetProperty("price");
var getMethod = propertyInfo.GetMethod;
string value = getMethod.Invoke(myObject, null) as string
编辑:
再次阅读你的问题后,我意识到,我没有回答你的问题。 您应该/可以将我以前的答案与索引器结合起来: https://docs.microsoft.com/en-us/dotnet/articles/csharp/programming-guide/indexers/index