From 5a3db984c52d625828a6259bc23c7ab3431350cb Mon Sep 17 00:00:00 2001 From: Adam Sitnik Date: Thu, 15 Dec 2022 16:57:46 +0100 Subject: [PATCH 1/3] don't create unnecessary lambdas --- src/System.CommandLine/Argument{T}.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/System.CommandLine/Argument{T}.cs b/src/System.CommandLine/Argument{T}.cs index 85467134f2..c2008032f3 100644 --- a/src/System.CommandLine/Argument{T}.cs +++ b/src/System.CommandLine/Argument{T}.cs @@ -39,7 +39,7 @@ public Argument( Func defaultValueFactory, string? description = null) : this(name, description) { - SetDefaultValueFactory(() => defaultValueFactory()); + SetDefaultValueFactory(defaultValueFactory); } /// @@ -63,7 +63,7 @@ public Argument( /// Thrown when is null. public Argument(Func defaultValueFactory) : this() { - SetDefaultValueFactory(() => defaultValueFactory()); + SetDefaultValueFactory(defaultValueFactory); } /// @@ -132,7 +132,7 @@ public Argument(Func parse, bool isDefault = false) : this(nu /// The default value for the argument. public void SetDefaultValue(T value) { - SetDefaultValueFactory(() => value); + SetDefaultValueFactory(_ => value); } /// From 20525f6ca985b2bd023ae285b188cb79ee8c83f2 Mon Sep 17 00:00:00 2001 From: Adam Sitnik Date: Thu, 15 Dec 2022 16:58:11 +0100 Subject: [PATCH 2/3] the Argument ctor will throw for null anyway --- src/System.CommandLine/Option{T}.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/System.CommandLine/Option{T}.cs b/src/System.CommandLine/Option{T}.cs index 1f75694a78..38a7b21949 100644 --- a/src/System.CommandLine/Option{T}.cs +++ b/src/System.CommandLine/Option{T}.cs @@ -51,7 +51,7 @@ public Option( Func defaultValueFactory, string? description = null) : this(name, description, - new Argument(defaultValueFactory ?? throw new ArgumentNullException(nameof(defaultValueFactory)))) + new Argument(defaultValueFactory)) { } /// @@ -59,7 +59,7 @@ public Option( string[] aliases, Func defaultValueFactory, string? description = null) - : this(aliases, description, new Argument(defaultValueFactory ?? throw new ArgumentNullException(nameof(defaultValueFactory)))) + : this(aliases, description, new Argument(defaultValueFactory)) { } From 0f80fd2047705aee0d309229c91843e9d0772cae Mon Sep 17 00:00:00 2001 From: Adam Sitnik Date: Thu, 15 Dec 2022 16:59:08 +0100 Subject: [PATCH 3/3] avoid closure allocations --- src/System.CommandLine/Argument{T}.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/System.CommandLine/Argument{T}.cs b/src/System.CommandLine/Argument{T}.cs index c2008032f3..500259f150 100644 --- a/src/System.CommandLine/Argument{T}.cs +++ b/src/System.CommandLine/Argument{T}.cs @@ -210,10 +210,10 @@ void UnrecognizedArgumentError(ArgumentResult argumentResult) /// The configured argument. public Argument AcceptLegalFilePathsOnly() { - var invalidPathChars = Path.GetInvalidPathChars(); - - Validators.Add(result => + Validators.Add(static result => { + var invalidPathChars = Path.GetInvalidPathChars(); + for (var i = 0; i < result.Tokens.Count; i++) { var token = result.Tokens[i]; @@ -239,10 +239,10 @@ public Argument AcceptLegalFilePathsOnly() /// The configured argument. public Argument AcceptLegalFileNamesOnly() { - var invalidFileNameChars = Path.GetInvalidFileNameChars(); - - Validators.Add(result => + Validators.Add(static result => { + var invalidFileNameChars = Path.GetInvalidFileNameChars(); + for (var i = 0; i < result.Tokens.Count; i++) { var token = result.Tokens[i];