Создайте отдельный текстовый файл, содержащий все команды, которые Вы обычно вводили бы в приложение оболочки sqlite3:
CREATE TABLE log_entry ( <snip> );
.separator "\t"
.import /path/to/logfile.log log_entry
Сохраняют его как, скажем, impscript.sql.
Создают пакетный файл, который называет оболочку sqlite3 с тем сценарием:
sqlite3.exe yourdatabase.db < /path/to/impscript.sql
Вызов пакетный файл.
На ноте стороны - при импорте, удостоверяются, что обернули ВСТАВКИ в транзакцию ! Это даст Вам мгновенное 10 000%-е ускорение.
Вы можете написать это, например
Action<int> method = j => j++;
List<Action<int>> operations = new List<Action<int>>();
operations.Add(method);
operations.Add(i => i++);
Проблема с вашим кодом заключается в том, что вы пытаетесь указать экземпляр в качестве аргумента типа для List.
Action
является экземпляром, тогда как Действие
- это тип.
Как упоминает другой плакат, вам просто нужно объявить тип списка как Action
, то есть только с параметром типа.
например,
var myNum = 5;
var myops = new List<Action<int>>();
myops.Add(j => j++);
myops.Add(j => j++);
foreach(var method in myops)
{
Console.WriteLine(method(myNum));
}
// Frowned upon, but fun syntax
myops.Each(method => method(myNum));
Конечно, можно создать список определенного типа делегата, например Action, Func или любых других. Поскольку анонимные делегаты могут быть преобразованы в любой тип делегата с совместимой подписью, вы можете создать список делегатов, если у них есть совместимые подписи.
Я не думаю, что создание списка делегатов с несколькими типами подписей было бы очень полезен, так как при наличии неопределенной подписи будет очень сложно вызвать делегата. Однако вы должны уметь делать это с помощью рефлексии. В этом случае вы можете просто использовать список объектов.