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

SearchExpressionEvaluatorAttribute 构造函数

建议更改

成功!

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

关闭

提交失败

由于某些原因,您的更改建议无法提交。请在几分钟后<a>重试</a>。感谢您抽出时间帮助我们提升 Unity 文档的质量。

关闭

取消

声明

public SearchExpressionEvaluatorAttribute(params SearchExpressionType[] signatureArgumentTypes);

声明

public SearchExpressionEvaluatorAttribute(string name, params SearchExpressionType[] signatureArgumentTypes);

声明

public SearchExpressionEvaluatorAttribute(Search.SearchExpressionEvaluationHints hints, params SearchExpressionType[] signatureArgumentTypes);

声明

public SearchExpressionEvaluatorAttribute(string name, Search.SearchExpressionEvaluationHints hints, params SearchExpressionType[] signatureArgumentTypes);

参数

signatureArgumentTypes 与与此计算器配合使用的参数类型对应的类型数组。
name 计算器的名称。如果未指定名称,将使用计算器函数的名称。
hints 提示,以指定函数应如何运行的计算器运行时。

说明

使用此属性将静态 C# 函数注册为新的计算器。在 SearchExpression 中使用时,SearchExpressionEvaluator 可以具有针对通过的参数验证的签名。

下面是一个带有不定长参数的示例。

[SearchExpressionEvaluator(SearchExpressionType.Iterable | SearchExpressionType.Variadic)]
[SearchExpressionEvaluatorSignatureOverload(SearchExpressionType.Number, SearchExpressionType.Iterable | SearchExpressionType.Variadic)]
[Description("Extract and returns the X first results for each expression.")]
public static IEnumerable<SearchItem> TakeXFirst(SearchExpressionContext c)
{
    var argIndex = 0;
    var takeNumber = 1;
    if (c.args[0].types.HasFlag(SearchExpressionType.Number))
    {
        ++argIndex;
        takeNumber = Math.Max((int)(c.args[0].GetNumberValue(takeNumber)), 0);
    }

    for ( ; argIndex < c.args.Length; ++argIndex)
    {
        var iterable = c.args[argIndex].Execute(c);
        var taken = 0;
        foreach (var item in iterable)
        {
            if (item == null)
                yield return null;
            else
            {
                yield return item;
                ++taken;
                if (taken == takeNumber)
                {
                    c.Break();
                    break;
                }
            }
        }
    }
}

下面是一个不支持线程计算的示例。

[Description("Returns ids of current selection")]
[SearchExpressionEvaluator(SearchExpressionEvaluationHints.ThreadNotSupported)]
public static IEnumerable<SearchItem> SelectionIds(SearchExpressionContext c)
{
    var instanceIds = UnityEditor.Selection.instanceIDs;
    foreach (var id in instanceIds)
    {
        yield return SearchExpression.CreateItem(id, c.ResolveAlias("selected id"));
    }
}