我正在研究用于 Elasticsearch 的 NEST 库,尝试创建类似的东西。
但是我不明白他们如何在 QueryBase.cs 中进行隐式类型转换:
但是我不明白他们如何在 QueryBase.cs 中进行隐式类型转换:
private static QueryBase Combine(QueryBase leftQuery, QueryBase rightQuery, Func<QueryContainer, QueryContainer, QueryContainer> combine)
{
if (IfEitherIsEmptyReturnTheOtherOrEmpty(leftQuery, rightQuery, out var q))
return q;
IQueryContainer container = combine(leftQuery, rightQuery);
var query = container.Bool;
return new BoolQuery
{
Must = query.Must,
MustNot = query.MustNot,
Should = query.Should,
Filter = query.Filter,
};
}
Func<QueryContainer, QueryContainer, QueryContainer> combine
被作为参数传递,并且它期望参数是QueryContainer
对象。
但是在稍后调用时,我们提供了一个类型为QueryBase
的leftQuery对象。
IQueryContainer container = combine(leftQuery, rightQuery);
为什么这样能够工作,我错过了什么?我找不到QueryContainer
和QueryBase
之间的任何关系。