版本: Unity 6 (6000.0)
语言英语
  • C#

IQueryEngineFilter.AddTypeParser

建议修改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交的内容,但我们会阅读用户提出的每项更改建议,并在适用时进行更新。

关闭

提交失败

由于某种原因,您的更改建议无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public Search.IQueryEngineFilter AddTypeParser(Func<string,ParseResult<TFilterConstant>> parser);

参数

parser 回调函数,用于确定字符串是否可以转换为 "TFilterConstant"。接受一个字符串并返回一个 ParseResult 对象。这包含成功标志,以及如果成功则包含实际转换后的值。

返回值

IQueryEngineFilter 当前过滤器。

描述

添加特定于过滤器的类型解析器。

添加特定于过滤器的类型解析器,该解析器解析字符串并返回自定义类型。由自定义运算符处理程序使用。此类型解析器仅由此过滤器使用,不会影响其他过滤器。

// Add a new type parser for Vector2 written as "[x, y]", but only for this filter.
// This type parser will not affect other filters.
queryEngine.TryGetFilter("p", out var filter);
filter.AddTypeParser(s =>
{
    // If the format requirement is not met, return a failure.
    if (!s.StartsWith("[") || !s.EndsWith("]"))
        return ParseResult<Vector2>.none;

    var trimmed = s.Trim('[', ']');
    var vectorTokens = trimmed.Split(',');
    var vectorValues = vectorTokens.Select(token => float.Parse(token, CultureInfo.InvariantCulture.NumberFormat)).ToList();
    if (vectorValues.Count != 2)
        return ParseResult<Vector2>.none;
    var vector = new Vector2(vectorValues[0], vectorValues[1]);

    // When the conversion succeeds, return a success.
    return new ParseResult<Vector2>(true, vector);
});

请参见 IQueryEngineFilter 以获取完整的示例。