/// <summary> /// 通过构建器获取命名空间 /// </summary> /// <param name="currentBuilder"></param> /// <param name="task"></param> /// <returns></returns> public static string GetNameSpace(this BuilderOptions currentBuilder, IBuilderTask task) { var currentTable = task.CurrentTable.CsName; var res = $"{task?.Project?.ProjectInfo?.NameSpace}.{currentBuilder?.ReplaceTablePath(currentTable).Replace("/", ".")}"; return(res); }
static void Main(string[] args) { var serviceProvider = new ServiceCollection() .AddLogging(builder => { builder.AddConsole(); }) .AddSingleton <IDirectoryService, DirectoryService>() .AddSingleton <IFindAndDeleteService, FindAndDeleteService>() .AddSingleton <IFindAndRenameService, FindAndRenameService>() .AddSingleton <IFindAndReplaceService, FindAndReplaceService>() .AddTransient <IServiceFromTemplateBuilder, PartyServiceFromPartyTemplateBuilder>() .BuildServiceProvider(); var builderOptions = new BuilderOptions() { DestTemplatePath = @"C:\temp\Output\" }; var destDir = builderOptions.DestTemplatePath; if (Directory.Exists(destDir)) { Directory.Delete(destDir, true); } var builderService = serviceProvider.GetService <SampleBuilder>(); builderService.BuildService(builderOptions); }
public Builder(BuilderOptions options, bool suppressEllipsis) { _sb = new StringBuilder(); _suppressEllipsis = suppressEllipsis; _options = options; _currentLimit = Math.Min(_options.MaximumLineLength, _options.MaximumOutputLength); }
/// <summary> /// 初始化构建器 /// </summary> public List <BuilderOptions> InitBuilder(Project project) { var page = new BuilderPageParam { PageNumber = 1, PageSize = 1000, BuilderType = BuilderType.Builder }; //获取所有构建器 var builderParam = page; var allBuilders = _serviceProvider.GetService <IBuilderService>().GetBuilderPage(builderParam).Result.Datas.ToList(); //获取所有模板 var templates = _serviceProvider.GetService <ITemplateService>().GetTemplatePageAsync(page).Result.Datas .ToList(); var templateIds = templates.Select(x => x.Id); var builderTemplateId = allBuilders.Select(x => x.TemplateId); //通过差集计算出没有构建器的模板 var needInsert = templateIds.Except(builderTemplateId); //筛选出模板 var ts = templates.Where(x => needInsert.Contains(x.Id)).ToList(); var defaultProjectId = project.Id; //添加模板对应的构建器 名称和路径均为模板名 var builders = ts.Select(x => { var name = Path.GetFileNameWithoutExtension(x.TemplateName); var builder = new BuilderOptions($"{x.TemplateType}_{name}", name, "", name) { TemplateId = x.Id, DefaultProjectId = defaultProjectId }; return(builder); }).ToList(); var options = builders.Select(b => _serviceProvider.GetService <IBuilderService>().AddBuilder(b).Result).ToList(); return(options); }
static unsafe void Main(string[] args) { Span <byte> s; //var x = File.OpenWrite("b.dll"); //AheadOfTimeActivator.WriteImplementation<TestClass>(x); //var y = File.OpenWrite("a.dll"); //AheadOfTimeActivator.WriteImplementation<TestClass2>(y); //x.Flush(); //y.Flush(); //var user32 = LibraryActivator.CreateInstance<TestClass>("user32.dll"); //user32.MessageBox(IntPtr.Zero, "SuperInvoke".ToCharArray(), "Hello from SuperInvoke!".ToCharArray(), 0); if (AotTest) { var libBuilder = new LibraryBuilder(); var opts = BuilderOptions.GetDefault(typeof(TestClass2)); libBuilder.Add(opts); #if NET47 var bytes = libBuilder.BuildBytes(); File.WriteAllBytes("c.dll", bytes); #else libBuilder.Build(); #endif } var lib = LibraryActivator.CreateInstance <TestClass2>("user32"); var a = Marshal.StringToHGlobalAnsi("Test 1"); var b = Marshal.StringToHGlobalAnsi("Hello from SuperInvoke!"); lib.MessageBox(default, (char *)a, (char *)b, 0);
/// <summary> /// Filters a sequence of entities based on a predicate builder. /// </summary> /// <typeparam name="T">Entity type.</typeparam> /// <param name="source">An entity sequence.</param> /// <param name="builder">A predicate builder.</param> /// <param name="options">Builder options</param> public static IQueryable <T> Build <T>( [NotNull] this IQueryable <T> source, [NotNull] Func <ILogicOperation <T>, IQueryBuilderResult <T> > builder, BuilderOptions options) { return(source.Build( builder, new OperationStrategy(options))); }
public static BuilderOptions UseMsSqlPersistent(this BuilderOptions options, Func <IResolverContext, IDbContextProvider> dbProviderFactory) { options.ServiceRegistration.Register <IEventStore, EventStore>(Lifetime.Singleton); options.ServiceRegistration.RegisterGeneric(typeof(IReadModeRepository <>), typeof(ReadModelRepository <>), Lifetime.Singleton); options.ServiceRegistration.Register(dbProviderFactory); options.ServiceRegistration.Register <IReadModelDbContextProvider>(dbProviderFactory); options.ServiceRegistration.Register <IAggregateDbContextProvider>(dbProviderFactory); return(options); }
internal static NativeApiContainer UseStrategyOne(UnmanagedLibrary unmanagedLibrary, Type type, Strategy strat) { var ctx = new NativeApiContext(unmanagedLibrary, strat); return((NativeApiContainer)Activator.CreateInstance( (GetImplementationInDomain(type, AppDomain.CurrentDomain) ?? LibraryBuilder .CreateAssembly(BuilderOptions.GetDefault(type)) .GetTypes().FirstOrDefault(type.IsAssignableFrom)) ?? throw new InvalidOperationException("Failed to create type."), ctx)); }
new public string ToString() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine(DeclareBuilderOption); stringBuilder.AppendLine(BuilderOptions.ToString(BuilderOptionLine + " {0}={1}")); stringBuilder.AppendLine(DeclareBuilderOption); stringBuilder.AppendLine(Code); return stringBuilder.ToString(); }
public DyLinker(FileLookup lookup, BuilderOptions options, DyTuple args) { this.Lookup = lookup; this.BuilderOptions = options; this.lang = new Lang(args) { FileName = nameof(lang), Id = 1 }; Units.Add(null); }
/// <summary> /// 获取CodeFirst名称 /// </summary> /// <param name="builder"></param> /// <param name="tableName"></param> /// <returns></returns> public static string GetName(this BuilderOptions builder, string tableName) { if (builder == null) { return(tableName); } var convert = new DefaultWordsConvert(builder.Mode); var convertName = convert.Convert(tableName); return($"{builder.Prefix}{convertName}{builder.Suffix}"); }
public static void Main(string[] args) { var builder = new LibraryBuilder(); builder.Add(BuilderOptions.GetDefault(typeof(GL))); File.WriteAllBytes("il.dll", builder.BuildBytes()); Process.Start ( @"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools\ildasm.exe", "/out=\"il.il\" \"il.dll\"" )?.WaitForExit(); }
/// <summary> /// 新增构建器 /// </summary> /// <param name="builderOptions"></param> /// <param name="autoSave"></param> /// <returns></returns> public async Task <BuilderOptions> AddBuilder(BuilderOptions builderOptions, bool autoSave = false) { _ = await GetAndCheckTemplate(builderOptions); builderOptions = await _builderRep.InsertAsync(builderOptions); if (autoSave) { UnitOfWork.Commit(); } return(builderOptions); }
public void BuildService(BuilderOptions builderOptions) { var destDir = builderOptions.DestTemplatePath; if (Directory.Exists(destDir)) { Directory.Delete(destDir, true); } _directoryService.DirectoryCopy(@"C:\Source\Repos\party-model", destDir, true); //FilesFindAndDelete(destDir, "PartyType", true); //FilesFindAndDelete(destDir, "RelationshipType", true); var projectName = "Company.Link"; _findAndRenameService.DirectoryFindAndRename(destDir, "Company.PartyModel", projectName, true); _findAndRenameService.DirectoryFindAndRename(destDir, "PartyModel", "ProgramScheduleStations", true); _findAndRenameService.FilesFindAndRename(destDir, "Company.PartyModel", projectName, true); _findAndRenameService.FilesFindAndRename(destDir, "PartyModel", "ProgramScheduleStations", true); _findAndRenameService.FilesFindAndRename(destDir, "Parties", "ProgramSchedules", true); _findAndRenameService.FilesFindAndRename(destDir, "PartyFrom", "Station", true); _findAndRenameService.FilesFindAndRename(destDir, "PartyTo", "ProgramSchedule", true); _findAndRenameService.FilesFindAndRename(destDir, "PartyType", "ProgramScheduleType", true); //FilesFindAndRename(destDir, "party", "program_schedule", true); _findAndReplaceService.FileContentFindAndReplace(destDir, "Company.PartyModel", projectName, true); _findAndReplaceService.FileContentFindAndReplace(destDir, "PartyModel", "ProgramScheduleStations", true); _findAndReplaceService.FileContentFindAndReplace(destDir, "PARTYMODEL", "PROGRAMSCHEDULESTATIONS", true); _findAndReplaceService.FileContentFindAndReplace(destDir, "PartyFrom", "Station", true); _findAndReplaceService.FileContentFindAndReplace(destDir, "PartyTo", "ProgramSchedule", true); _findAndReplaceService.FileContentFindAndReplace(destDir, "PartyFromExternal", "StationExternal", true); _findAndReplaceService.FileContentFindAndReplace(destDir, "PartyToExternal", "ProgramScheduleExternal", true); _findAndReplaceService.FileContentFindAndReplace(destDir, "Parties", "ProgramSchedules", true); _findAndReplaceService.FileContentFindAndReplace(destDir, "parties", "programSchedules", true, new[] { "sql", "esql" }); _findAndReplaceService.FileContentFindAndReplace(destDir, "PartyType", "ProgramScheduleType", true); //FileContentFindAndReplace(destDir, "Relationship", "", true); _findAndReplaceService.FileContentFindAndReplace(destDir, "party", "program_schedule", true, null, new string[] { "sql", "esql" }); }
public Visitor( CommonObjectFormatter formatter, BuilderOptions builderOptions, CommonPrimitiveFormatterOptions primitiveOptions, CommonTypeNameFormatterOptions typeNameOptions, MemberDisplayFormat memberDisplayFormat) { _formatter = formatter; _builderOptions = builderOptions; _primitiveOptions = primitiveOptions; _typeNameOptions = typeNameOptions; _memberDisplayFormat = memberDisplayFormat; }
private static async Task Main( string[] arguments, CancellationToken cancellationToken, bool errorIfToolConfigNotExists = false ) { Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; _errorIfToolConfigNotExists = errorIfToolConfigNotExists; string enviroinmentVarsConfigPath = Path.Combine(Environment.CurrentDirectory, _enviroinmentVarsConfigFile); string buildToolConfigPath = Path.Combine(Environment.CurrentDirectory, _dotnetBuildToolConfig); Task <BuilderOptions> setToolOptionsTask = SetToolOptionsAsync(buildToolConfigPath); Task setEnvVarsTask = SetEnviroinmentVariablesAsync(enviroinmentVarsConfigPath); BuilderOptions options = await setToolOptionsTask; await setEnvVarsTask; await DotNetBuilder.CreatBuilderAsync(options, cancellationToken).ExecuteTargetsAsync(arguments); }
private async Task <Template> GetAndCheckTemplate(BuilderOptions builderOptions) { var template = await _templateRepository.GetAsync(builderOptions.TemplateId); if (template == null) { throw new Exception("新增失败!找不到相关模板"); } if (template.TemplateType == TemplateType.UnKnow) { throw new Exception("新增失败!模板类型未知"); } if (builderOptions.Type == BuilderType.GlobalBuilder && template.TemplateType != TemplateType.Global) { throw new Exception("新增失败!全局构造器必须搭配全局模板"); } return(template); }
//not suggest to use relation database. static void Main(string[] args) { var dbContextProvider = new DbContextProvider(); var builderOption = BuilderOptions .New() .UseStructureMapRegistration() .UseDefaultConfig() .UseMsSqlPersistent(a => dbContextProvider) .Register(typeof(UserRegisterCommand).Assembly); var resolver = builderOption.ServiceRegistration.CreateResolver(); //Command var userQueryService = resolver.Resolve <QueryService <UserReadModel> >(); var todoQueryService = resolver.Resolve <QueryService <ToDoReadModel> >(); var bus = resolver.Resolve <IBus>(); foreach (var i in Enumerable.Range(1, 100)) { Console.WriteLine(i); var personId = Guid.NewGuid(); bus.Send(new UserRegisterCommand { AggregateId = personId, UserName = $"Sam Pang{i}", Password = $"Password{i}" }); bus.Send(new CreateToDoCommand { AggregateId = Guid.NewGuid(), Title = $"Todo Title{i}", Description = $"Todo Description{i}", UserId = personId }); } //Query var persons = userQueryService.GetAll(); var todos = todoQueryService.GetAll(); persons.ForEach(a => { Console.WriteLine($"{a.Id},{a.UserName},{a.Password}"); foreach (var toDo in todos.Where(t => t.Creater == a.Id)) { Console.WriteLine($"{toDo.Id},{toDo.Title},{toDo.Description}"); } }); Console.ReadLine(); }
static void Main(string[] args) { var builderOption = BuilderOptions .New() .UseStructureMapRegistration() .UseDefaultConfig() .UseMongoPersistent() .Register(typeof(UserCommandHandle).Assembly); var resolver = builderOption.ServiceRegistration.CreateResolver(); //Command var userQueryService = resolver.Resolve <QueryService <UserReadModel> >(); var todoQueryService = resolver.Resolve <QueryService <ToDoReadModel> >(); foreach (var i in Enumerable.Range(1, 1000)) { var personId = Guid.NewGuid(); var bus = resolver.Resolve <IBus>(); bus.Send(new UserRegisterCommand { AggregateId = personId, UserName = $"Sam Pang{i}", Password = $"Password{i}" }); bus.Send(new CreateToDoCommand { AggregateId = Guid.NewGuid(), Title = $"Todo Title{i}", Description = $"Todo Description{i}", UserId = personId }); } //Query var persons = userQueryService.GetAll(); persons.ForEach(a => { Console.WriteLine($"{a.Id},{a.UserName},{a.Password}"); Console.WriteLine($"Dodo list count:{a.MyTodoList.Count}"); a.MyTodoList.ForEach(t => { var todo = todoQueryService.GetById(t); Console.WriteLine($"{todo.Id},{todo.Title},{todo.Description}"); }); }); Console.ReadLine(); }
public async Task TestProjectBuilderOptions() { using var scope = ServiceProvider.CreateScope(); var fsql = ServiceProvider.GetService <IFreeSql <FsBuilder> >(); var template = fsql.Select <Template>().ToOne(); var b = new BuilderOptions { Mode = ConvertMode.None, Name = "测试构建器", OutPutPath = "Test", Prefix = "", Suffix = "", TemplateId = template.Id, Type = BuilderType.Builder }; b.Validate(); var id = fsql.Insert <BuilderOptions>().AppendData(b).ExecuteIdentity(); Assert.True(id > 0); }
public Builder(BuilderOptions options, Func <Tuple <FetchResult, ExtractResult, ScrapeResult>, Result> transform = null) { transform = transform ?? Build; _input = new JoinBlock <FetchResult, ExtractResult, ScrapeResult>(new GroupingDataflowBlockOptions { Greedy = true }); _output = new TransformBlock <Tuple <FetchResult, ExtractResult, ScrapeResult>, Result>(transform, new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = -1 }); var linkOptions = new DataflowLinkOptions { PropagateCompletion = true }; _input.LinkTo(_output, linkOptions); }
private static IList <FunSet> Compile(IEnumerable <string> files, BuilderOptions buildOptions, out List <BuildMessage> warns) { var funColl = new List <FunSet>(); warns = new List <BuildMessage>(); foreach (var file in files) { var linker = new DyLinker(FileLookup.Create(Path.GetDirectoryName(file)), buildOptions); var cres = linker.Make(SourceBuffer.FromFile(file)); var funs = new FunSet(); funs.Funs = new Dictionary <string, DyFunction>(StringComparer.OrdinalIgnoreCase); funs.FileName = file; if (!cres.Success) { throw new DyBuildException(cres.Messages); } warns.AddRange(cres.Messages.Where(m => m.Type == BuildMessageType.Warning)); var ctx = DyMachine.CreateExecutionContext(cres.Value); funs.Context = ctx; DyMachine.Execute(ctx); foreach (var v in DyMachine.DumpVariables(ctx)) { if (v.Value is DyFunction fn) { funs.Funs.Remove(v.Name); funs.Funs.Add(v.Name, fn); } } funColl.Add(funs); } return(funColl); }
/// <summary> /// 如果不是系统类型则自动转换成构建器生成的类名 /// </summary> /// <param name="builder"></param> /// <param name="type"></param> /// <returns></returns> public static string ToBuilderType(this BuilderOptions builder, Type type) { if (type == null) { return(string.Empty); } var res = Reflection.SystemCsType(type); if (!string.IsNullOrWhiteSpace(res)) { return(res); } if (Reflection.IsCollection(type)) { var typeDefinition = type.GetGenericTypeDefinition(); var types = string.Join(',', type.GetGenericArguments().Select(x => { var sysType = Reflection.SystemCsType(x); return(string.IsNullOrWhiteSpace(sysType) ? builder.GetName(x.Name) : sysType); })); var collectionType = typeDefinition == typeof(IEnumerable <>) ? "IEnumerable" : typeDefinition == typeof(IReadOnlyCollection <>) ? "IReadOnlyCollection" : typeDefinition == typeof(IReadOnlyList <>) ? "IReadOnlyList" : typeDefinition == typeof(ICollection <>) ? "ICollection" : typeDefinition == typeof(IList <>) ? "IList" : typeDefinition == typeof(List <>) ? "List" : typeDefinition == typeof(IDictionary <,>) ? "IDictionary" : typeDefinition == typeof(Dictionary <,>) ? "Dictionary" : ""; return($"{collectionType}<{types}>"); } if (Reflection.IsEnum(type)) { return(type.FullName); } return(builder.GetName(type.Name)); }
public static string ToBuilderTypePk(this BuilderOptions builder, ColumnInfo columnInfo) { var type = columnInfo.CsType; if (type == null) { return(string.Empty); } var res = Reflection.SystemCsType(type); if (!string.IsNullOrWhiteSpace(res)) { return(res); } if (Reflection.IsCollection(type)) { var typeDefinition = type.GetGenericTypeDefinition(); var typeStr = columnInfo.Table.Primarys?.FirstOrDefault()?.CsType; var collectionType = typeDefinition == typeof(IEnumerable <>) ? "IEnumerable" : typeDefinition == typeof(IReadOnlyCollection <>) ? "IReadOnlyCollection" : typeDefinition == typeof(IReadOnlyList <>) ? "IReadOnlyList" : typeDefinition == typeof(ICollection <>) ? "ICollection" : typeDefinition == typeof(IList <>) ? "IList" : typeDefinition == typeof(List <>) ? "List" : typeDefinition == typeof(IDictionary <,>) ? "IDictionary" : typeDefinition == typeof(Dictionary <,>) ? "Dictionary" : ""; return($"{collectionType}<{typeStr}>"); } if (Reflection.IsEnum(type)) { return(type.FullName); } return(Reflection.SystemCsType(columnInfo.Table.Primarys?.FirstOrDefault()?.CsType)); }
public static BuilderOptions CreateBuildOptions(DyaOptions options) { var ret = new BuilderOptions { Debug = options.Debug, NoOptimizations = options.NoOptimizations, NoLangModule = options.NoLang, NoWarnings = options.NoWarnings, NoWarningsLinker = options.NoWarningsLinker }; if (options.IgnoreWarnings != null) { foreach (var i in options.IgnoreWarnings) { if (!ret.IgnoreWarnings.Contains(i)) { ret.IgnoreWarnings.Add(i); } } } return(ret); }
public static DyObject?Eval(SourceBuffer buffer, BuilderOptions options, FileLookup lookup, object?args = null) { DyTuple?tup = null; if (args is not null) { var arr = args.GetType().GetProperties().Select(pi => new DyLabel(pi.Name, TypeConverter.ConvertFrom(pi.GetValue(args)))).ToArray(); tup = new DyTuple(arr); } var linker = new DyLinker(lookup ?? FileLookup.Default, options ?? BuilderOptions.Default(), tup); var result = linker.Make(buffer); if (!result.Success) { throw new DyBuildException(result.Messages); } var ctx = DyMachine.CreateExecutionContext(result.Value !); var result2 = DyMachine.Execute(ctx); return(result2.Value); }
public void Dispose() { if (BuilderOptions != null) BuilderOptions.Dispose(); }
protected Crawler(IDocumentFactory documentFactory, IKeyValueStore<string, Result> store, IKeyValueStore<string, FetchTarget> frontier) { _store = store; _frontier = frontier; var fetcherOptions = new FetcherOptions { UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36", }; var parserOptions = new ParserOptions { }; var scraperOptions = new ScraperOptions { }; var extractorOptions = new ExtractorOptions { }; //var storerOptions = new StorerOptions //{ //}; var builderOptions = new BuilderOptions { }; var providerOptions = new ProviderOptions { }; //var dispatcherOptions = new DispatcherOptions //{ //}; Fetcher = new Fetcher(fetcherOptions); Parser = new Parser(parserOptions, documentFactory); Scraper = new Scraper(scraperOptions); Extractor = new Extractor(extractorOptions); Storer = new Storer(store); Builder = new Builder(builderOptions); Provider = new Provider(providerOptions, store, frontier); Dispatcher = new Dispatcher(); Fetcher.SendTo(Parser, x => x.StatusCode == System.Net.HttpStatusCode.OK); Parser.SendTo(Scraper); Parser.SendTo(Extractor); Fetcher.SendTo(Builder, x => x.StatusCode == System.Net.HttpStatusCode.OK); Scraper.SendTo(Builder); Extractor.SendTo(Builder); Builder.SendTo(Storer); //Storer.LinkTo(new ActionBlock<Result>(x => //{ //})); Builder.SendTo(Provider); Provider.SendTo(Dispatcher, x => x != null); Dispatcher.SendTo(Fetcher); }
/// <summary> /// 通过转换器后的字段名 /// </summary> /// <param name="column"></param> /// <param name="name"></param> /// <returns></returns> public static string GetColumnName(this BuilderOptions column, string name) { var convert = new DefaultWordsConvert(column.Mode); return($"{column.Prefix}{convert.Convert(name)}{column.Suffix}"); }
public DyLinker(FileLookup lookup, BuilderOptions options) : this(lookup, options, null) { }
private static async Task <BuilderOptions> SetToolOptionsAsync(string path) { Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); const string tool = "TOOL OPTIONS: "; if (File.Exists(path)) { Console.WriteLine($"{tool}File \"{path}\" found.\nSet DotNetBuildTool options from {path} ->"); } else { Console.ForegroundColor = ConsoleColor.DarkRed; Console.WriteLine($"{tool}Cant find \"{path}\" file.\nSorry, command line arguments not Implement yet."); Console.ResetColor(); if (_errorIfToolConfigNotExists) { throw new Exception($"{tool}Can't configure build tool."); } } BuilderOptions result = new BuilderOptions(); await foreach (KeyValuePair <string, string> item in LoadToolConfig(path)) { PropertyInfo?property = typeof(BuilderOptions) .GetProperties() .FirstOrDefault(x => x.Name.ToUpper() == item.Key.ToUpper()); if (property == null) { Console.ForegroundColor = ConsoleColor.DarkYellow; Console.WriteLine($" {tool}Can't find and set: \"{item.Key}\" -> Done."); Console.ResetColor(); } else { bool isParsed = Enum.TryParse(property.PropertyType.Name.ToUpper(), out OptionType optionType); if (!isParsed) { optionType = property.PropertyType.IsEnum ? OptionType.ENUM : OptionType.Unknown; } try { object givenObj = optionType switch { OptionType.BOOLEAN => ParseBool(item.Value), OptionType.STRING => item.Value, OptionType.ENUM => ParseEnum(property.PropertyType, item.Value), _ => throw new ArgumentException($"Unknown type: {property.PropertyType}") }; property.SetValue(result, givenObj); } catch (ArgumentException ex) { throw new ArgumentException($"{item.Key} option can't be parsed", ex); } Console.WriteLine($" {tool}{item.Key} \"{item.Value}\" -> Done."); } } stopWatch.Stop(); Console.WriteLine($"{tool}Done. Elapsed time: {((float)stopWatch.ElapsedTicks / (float)Stopwatch.Frequency).ToString("0.0000")}s."); return(result); bool ParseBool(string str) { return(str switch { "0" => false, "1" => true, _ => throw new ArgumentException($"Can't parse value: {str}") }); }