c# - NEST (C#) 如何隐式转换类型?

标签 c# nest

我正在查看 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/

相关文章:

c# - 奇怪的 IndexOutOfRangeException,即使被捕获

elasticsearch - Elastic Search NEST-如何在搜索中具有多个级别的过滤器

.net - .Net Nest中的ElasticSearch过滤器聚合

c# - 变量/类型声明默认私有(private)

c# - 动态上下文菜单

c# - 如何检测 Excel 工作簿是否关闭(在 C# 中使用 Interop)?

elasticsearch - 如何使用NEST客户端在一系列附件中使用附件处理器并删除处理器?

c# - 忽略Elasticsearch Nest中的TypeConverter属性

c# - 带有对象初始化器 NEST 5.x 的 Elasticsearch 嵌套动态查询

c# - 将字符串拆分为具有特定条件的多个字符串