Сериализация функций
От: VVVa  
Дата: 23.05.23 19:09
Оценка:
Можно ли как нибудь функцию (или ссылку на неё) превратить в строку и обратно?
Можно ли это делать если функция задавалась лямбда выражением?
Re: Сериализация функций
От: RushDevion Россия  
Дата: 23.05.23 19:53
Оценка:
Как это выглядеть должно, приведи пример?

Вытащить информацию о типе/методе из делегата или expression — это возможно.
Представить ее в каком-то строковом виде — тоже возможно.
Превратить строковый вид обратно в делегат или expression — в общем случае нет, т.к для не-статических вызовов нужен будет экземпляр объекта.
Re[2]: Сериализация функций
От: VVVa  
Дата: 23.05.23 20:16
Оценка:
Здравствуйте, RushDevion, Вы писали:

RD>Как это выглядеть должно, приведи пример?


да просто много одинаковых делегатов инициализированных лямбда выражениями в списке и надо бы этот порядок сахранить/загрузить из файла

RD>Вытащить информацию о типе/методе из делегата или expression — это возможно.

RD>Представить ее в каком-то строковом виде — тоже возможно.
RD>Превратить строковый вид обратно в делегат или expression — в общем случае нет, т.к для не-статических вызовов нужен будет экземпляр объекта.
а если я делаю List.Add(() => { ... }); то тоже будут проблемы с "Превратить строковый вид обратно в делегат"
Re[3]: Сериализация функций
От: vaa  
Дата: 24.05.23 01:44
Оценка: +1
Здравствуйте, VVVa, Вы писали:

VVV>Здравствуйте, RushDevion, Вы писали:


RD>>Как это выглядеть должно, приведи пример?


VVV>да просто много одинаковых делегатов инициализированных лямбда выражениями в списке и надо бы этот порядок сахранить/загрузить из файла

это называется конфигурация. создаете словарик [имя функции -> лямбда]. в файл сохраняете порядок имен, при запуске программы достаете из словарика нужную лямбду.
VVV>а если я делаю List.Add(() => { ... }); то тоже будут проблемы с "Превратить строковый вид обратно в делегат"
Cкорее всего вам это не нужно. Или более детально опишите задачу.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[4]: Сериализация функций
От: VVVa  
Дата: 24.05.23 09:40
Оценка:
Здравствуйте, vaa, Вы писали:

VVV>>да просто много одинаковых делегатов инициализированных лямбда выражениями в списке и надо бы этот порядок сахранить/загрузить из файла

vaa>это называется конфигурация. создаете словарик [имя функции -> лямбда]. в файл сохраняете порядок имен, при запуске программы достаете из словарика нужную лямбду.
не ну это понятно но крайне неудобно для меня ...
VVV>>а если я делаю List.Add(() => { ... }); то тоже будут проблемы с "Превратить строковый вид обратно в делегат"
vaa>Cкорее всего вам это не нужно. Или более детально опишите задачу.
Писал свой парсер — и на каждое правило задавалось лямбда для объединения в не терминал (в общем само условие дерево и задавить идентификатор под каждую лямбду неохота)... захотелось сохранить таблицуы в файл (долго генерируется при старте)
Re: Сериализация функций
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 24.05.23 09:46
Оценка:
Здравствуйте, VVVa, Вы писали:

VVV>Можно ли как нибудь функцию (или ссылку на неё) превратить в строку и обратно?

VVV>Можно ли это делать если функция задавалась лямбда выражением?

Ну через Expression и Roslyn можно все. Только вот сериализатор нужно свой писать или использовать сторонний
https://stackoverflow.com/questions/56260862/serialize-lambdaexpression-to-and-from-string-for-saving-in-a-database

кстати в MS SQL тоже применяется
https://learn.microsoft.com/en-us/openspecs/sql_server_protocols/ms-letsf/697e4fad-ab35-4861-a3f5-a62466a3ae68
и солнце б утром не вставало, когда бы не было меня
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.