【问题标题】:Pass object property as parameter and access it [duplicate]将对象属性作为参数传递并访问它[重复]
【发布时间】:2015-06-29 13:44:08
【问题描述】:

我已经查看了这个问题的所有 SO 答案,但没有找到一个吸引人的答案。我正在尝试创建一个 TextFilter 类,用于为基于字符串的属性生成简单的可观察集合过滤器。这是我的想法:

public class TextFilter : IFilter
{
   Func<string> Property;
   string Target { get; set; }

   public TextFilter(Func<string>property, string target)
   {
      Property = property;
      Target = target;
   }

   public bool Filter(object item)
   {
      return ((MyObject)item).***Property***.Contains(Target);
    }
}

但是我找不到传递我的属性并在之后访问它们的方法?

【问题讨论】:

  • 您能否解释一下您所看到的标准委托解决方案如何不适用于您的案例 - 比如stackoverflow.com/questions/1178574/…
  • @Alexei Levenkov 这实际上是我一直在寻找的,我刚开始没有意识到,谢谢!

标签: c# properties filtering


【解决方案1】:

你可以试试这个:

public class TextFilter : IFilter
{
   Func<object, string> Property;
   string Target { get; set; }

   public TextFilter(Func<object, string> property, string target)
   {
      Property = property;
      Target = target;
   }

   public bool Filter(object item)
   {
      return Property(item).Contains(Target);
    }
}

这样使用:

var value = new MyObject() { Property = "This is a Test" };

var filter = new TextFilter(o => ((MyObject)o).Property, "Test");

bool isFiltered = filter.Filter(value);

如果你不需要你的 TextFilters 是同一个类,你可以使用通用的TextFilter&lt;T&gt; 而不是使用object

如果你真的只想拥有属性,你可能需要expression trees

【讨论】:

  • 你能给出一个 TextFilter 实例化示例吗?
  • 好的,谢谢!
猜你喜欢
  • 2017-01-19
  • 1970-01-01
  • 1970-01-01
  • 2019-03-03
  • 2011-06-12
  • 2012-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多