【问题标题】:Get PropertyInfo of a parameter passed as lambda expression | Compact Framework, C#获取作为 lambda 表达式传递的参数的 PropertyInfo |紧凑的框架,C#
【发布时间】:2013-06-10 12:51:52
【问题描述】:

假设我有以下资产类:

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

谢谢。

【问题讨论】:

    标签: c# reflection lambda compact-framework


    【解决方案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&lt;PropertyInfo&gt; 的。我能够使用下面的代码拉出一个 PropertyInfo 对象:

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

    这个项目没有任何用处。

    【讨论】:

    • 你误会了。我想要属于asset.Name 属性的PropertyInfo 对象。 msdn.microsoft.com/en-us/library/…
    • 编辑您的原始帖子,以准确显示您要提取的内容以及您如何使用传统代码进行操作。也许那时我会理解到足以帮助你。 Executing Assembly 有很多属性和方法。
    • 我添加了我想如何调用我的方法。希望现在更清楚了。
    • 我仍然不确定您需要做什么。我更新了我的代码,但我认为您不会使用反射从移动设备中提取太多信息。
    猜你喜欢
    • 2018-02-06
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多