我正在查看 NEST Elasticsearch 的库。尝试创建类似的东西。
但无法理解他们如何在 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
.
最佳答案
正如@Severius5 在评论中所说,答案在第 112 行:
public static implicit operator QueryContainer(QueryBase query) =>
query == null ? null : new QueryContainer(query);
基本上,它调用了隐式用户定义类型转换运算符。非常感谢。
您可以阅读更多documentation
关于c# - NEST (C#) 如何隐式转换类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54027273/