获取作为lambda表达式传递的参数的PropertyInfo紧凑框架,C#

时间:2013-06-10 12:51:53

标签: c# reflection lambda compact-framework

说我有以下资产类:

class Asset
{
    public int Id { get; set; }
    public string Name { get; set; }
}

现在我想编写一个方法GetPropertyInfo(a=>a.Name);,这个方法为我提供了Asset.Name的PropertyInfo。我应该能够像这样调用这个方法:

编辑示例方法调用

PropertyInfo propInfo = GetPropertyInfo(a=>a.Name);

我有List<PropertyInfo>所以我想将给定的lambda表达式与列表中的表达式匹配。

if(Possible on Compact Framework 3.5 && using C#)
    How?
else
    Please Notify

感谢。

1 个答案:

答案 0 :(得分:1)

这可以在.NETCF 3.5下完成。

private List<Asset> m_list;

private Asset[] GetPropertyInfo(string name) {
  var items = m_list.Where(a => a.Name == name);
  if (items != null) {
    return items.ToArray();
  } else {
    return null;
  }
}

但是,您需要初始化m_list并先填写数据。

<强>更新

因此,您的列表类型为PropertyInfo,并且您希望调用以获取与特定Asset对象匹配的类型。

如果这是正确的,您只需编辑上面的代码如下:

private List<PropertyInfo> m_list;

private PropertyInfo GetPropertyInfo(Asset a) {
  return m_list.FirstOrDefault(x => x.Name == a.Name);
}

我不确定你是如何获得List<PropertyInfo>的。我可以使用下面的代码拉出一个PropertyInfo对象:

private PropertyInfo GetPropertyInfo() {
  var t = Type.GetType("System.Reflection.MemberInfo");
  return t.GetProperty("Name");
}

此项目没有任何用处。