将对象属性作为参数传递并访问它

本文关键字:访问 参数传递 对象 属性 | 更新日期: 2023-09-27 18:00:09

我已经查看了这个问题的所有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);
    }
}

然而,我找不到一种方法来传递我的财产,然后访问它们?

将对象属性作为参数传递并访问它

你可以试试这个:

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<T>而不是object

如果您真的只想拥有属性,则可能需要表达式树。