过滤器需要通过引用传递才能附加到它

Filter needs to be passed by reference in order to append to it

我想了解为什么 Expression<Func<SomeObject, bool>> 过滤器需要通过引用传递。

这是一个对象,默认情况下应由 c# 中的 ref 传递。

Expression<Func<SomeObject,bool>> filter = PredicateBuilder.New<SomeObject>(true);


//Function that builds the filter
void buildFilter(ref Expression<Func<SomeObject, bool>> filter){ 
filter = filter.And(x => x.SomeProperty == sth);
...builds filter. }

这是什么以及为什么我们需要这样处理它?

这是因为您是在替换原始对象,而不是更改它。您正在通过从现有引用生成新引用来在新引用上创建过滤点。

filter = filter.And(x => x.SomeProperty == sth);

这不会更改对象筛选器指向的位置,而是指向一个新的对象筛选器。如果您不通过引用传递,过滤器将一直指向原始对象。