Конструктор SearchExpressionEvaluatorAttribute
Declaration
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 | Массив типов, соответствующих типу параметров, используемых с этим оценивателем. |
| имя | Имя оценщика. Если имя не указано, то будет использоваться имя функции оценщика. |
| советы | Подсказки для указания времени выполнения оценщика, как должна запускаться функция. |
Описание
С помощью этого атрибута статическая функция C# регистрируется как новый вычислитель. У SearchExpressionEvaluator при использовании внутри SearchExpression может иметь подпись, которая проверяется на соответствие переданным параметрам.
Здесь приведен пример использования параметра Variadic.
[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"));
}
}