узел. лист или узел можно выбрать по любому из 2х параметров: Тип или Имя. Сейчас я в процедуру выбора передаю корень и массив селекторов (Тип селектора и значение селектора). Получается очень многословно. Но если ввести строку по типу XPath и ее парсить, то парсинг этой строки будет довольно дорогой (относительно самого выбора дерева). Можно-ли как-то сказать что если у меня с вызывающей стороны константа (строка), то на этапе компиляции я хочу ее переделать в то что удобно мне? Или на этапе первого вызова. Что-то типа GIT компиляции.
Покажите где многословно получается
А во что ты бы хотел эту строку переделать? Может, просто лямбочку передавать, а?
У меня есть функция, которая выбирает лист. Вот в нее.
Ну и передай функцию.
Покажите код лучше
Причем тут это?..
Говоришь — хочу передать строку, которая идентифицирует функцию. Я говорю — ну и передай функцию. А ты такой — причём тут это.
var result = Select(Tree, new Selector[] { new Selector(){Type = SelectorType.Name, Selector = "qwe"}, new Selector(){Type = SelectorType.Type, Selector = "rty"}, new Selector(){Type = SelectorType.Name, Selector = "asd"}, new Selector(){Type = SelectorType.Name, Selector = "fgh"}, new Selector(){Type = SelectorType.Type, Selector = "zxc"}, new Selector(){Type = SelectorType.Type, Selector = "vbn"}, });
А что возвращает? Список нод, удовлетворяющих условиям всем? Или хотя бы одному?
Сделайте fluentapi А ля ByName(name).ByType(type) и т.д.
Ну вот те впадлу передать туда x => x.qwe, ну например? Или select("qwe")?
Я не понимаю пока вообще ничего что то
Не впадлу, а мне тогда придется заниматься анализом строки каждый раз. Это удар по производительности
Если честно, я тоже. Но надеюсь, что в процессе обсуждения всё-таки станет понятнее.
Она ж всегда одинаковая Кэш, да, как предложили выше
И как это сделать так, чтобы небыло обращение к какому-нибудь дикшенари?
Ну а причём тут это? :)
Что за требования к производительности такие зверские?
Запутался)
лишние 0.000000000000000000000000000000000000000000001 мс
Рассчитайте на старте приложения один раз результат и возвращайте его всегда Раз аргументы всегда одинаковые
Дерево всегда разное
Тогда что планируется делать в компилтайме?
Анализировать это дерево очевидно-же
Строку распарсьте один раз на старте
Тогда это потеряет читабельность или покажите примерный код.
Вы уж решите, или читабельность или 100к в секунду
Все вместе. Я знаю решение для других языков.
Дак дерева нету в компилтайме?
Код парсинга строки?
Код вызова так, чтобы он был быстрый.
Тогда на старте приложение распарсте строку, сложите в структуру какую нибудь. И потом не парьсте её и не принимайте на вход вообще
Тогда это будет менее наглядно. Так как сама строка будет не рядом с вызовом Select'а, а где-то еще.
Чтобы вызов был быстрый — его можно заинлайнить. Но проблема точно в этом?
Ну это нормально, раз там строка всегда одна Это как конфиг уже, какая разница что там конкретно
Пример чего?
Того о чем вы говорите. Просто C# не совсем родной язык.
Ну вот в Перле я-бы написал что-то типа: my $result = search(state $search_path = Searcher.Build("qwe/rty")); В условных плюсах код был-бы таким-же
А на сишарпе кто мешает так же написать?
И как тут избегаете парсинга?
Отсутствие state'а.
А что это такое?
Все state переменные инициализируются один раз в жизни функции
Это просто статик шоле?
Обсуждают сегодня