如何使用属性名称作为字符串获取属性值,如object [“foo”]

时间:2017-05-13 12:07:18

标签: c#

如果在运行时将所需属性的名称作为字符串提供,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]      // ??
  }

1 个答案:

答案 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