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

Pass object property as parameter and access it

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

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 class,您可以使用通用 TextFilter<T> 而不是 object.

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