Unity 6.3
0 онлайн 81 гостей 3 в системе
Вход

QueryValidationOptions.skipUnknownFilters

Declaration

public bool skipUnknownFilters;

Описание

Логический параметр, указывающий, следует ли пропускать неизвестные фильтры.

Если true, неизвестные фильтры пропускаются. Если false и validateFilters является true, неизвестные фильтры будут генерировать ошибки, если не будет предоставлен обработчик по умолчанию с QueryEngine.SetDefaultFilter.

using System.Linq;
using UnityEditor;
using UnityEditor.Search;
using UnityEngine;

static class Example_QueryValidationOptions_skipUnknownFilters
{
    [MenuItem("Examples/QueryValidationOptions/skipUnknownFilters")]
    public static void RunExample()
    {
        // Set up the query validation options with filter validation and unknown filter skipping.
        var validationOptions = new QueryValidationOptions { validateFilters = true, skipUnknownFilters = true};

        // Set up the query engine
        var queryEngine = new QueryEngine<MyObjectType>(validationOptions);
        queryEngine.AddFilter("id", myObj => myObj.id);
        queryEngine.SetSearchDataCallback(myObj => new[] { myObj.id.ToString(), myObj.name });

        var dataset = new[]
        {
            new MyObjectType() { id = 0, name = "Test 1" },
            new MyObjectType() { id = 10, name = "Test 2" }
        };

        // Parse a query with the filter "id". There shouldn't be any errors
        var query = queryEngine.ParseQuery("id>10");
        Debug.Assert(query.valid, $"Query \"{query.text}\" should be valid.");

        // Because the QueryEngine is skipping unknown filter, there should not be errors for unknown filters
        // but it should still get results for filters that are known. If validateFilters were set
        // to false, this query would yield no results since the generated filter node for the unknown filter
        // would automatically return false for any elements of the filtered data set.
        query = queryEngine.ParseQuery("id<10 name:MyName");
        Debug.Assert(query.valid, $"Query \"{query.text}\" should be valid.");
        var filteredData = query.Apply(dataset).ToList();
        Debug.Assert(filteredData.Count == 1, $"There should be 1 item in the filtered list but found {filteredData.Count} items.");
        Debug.Assert(filteredData.Contains(dataset[0]), "Test 1 should be in the filtered list since its id is < 10");
    }

    class MyObjectType
    {
        public int id { get; set; }
        public string name { get; set; } = string.Empty;
        public Vector2 position { get; set; } = Vector2.zero;
        public bool active { get; set; }

        public override string ToString()
        {
            return $"({id}, {name}, ({position.x}, {position.y}), {active})";
        }
    }
}