将对象 属性 作为参数传递并访问它
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。
我查看了这个问题的所有 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。