Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Importante
System.CommandLine
è attualmente disponibile in ANTEPRIMA e questa documentazione è per la versione 2.0 beta 5.
Alcune informazioni riguardano il prodotto in fase di pre-rilascio che potrebbe essere modificato in modo sostanziale prima del rilascio. Microsoft non fornisce alcuna garanzia, espressa o implicita, in relazione alle informazioni fornite qui.
Per impostazione predefinita, System.CommandLine fornisce un set di parser predefiniti che possono analizzare molti tipi comuni:
bool
-
byte
esbyte
-
short
eushort
-
int
euint
-
long
eulong
-
float
edouble
decimal
-
DateTime
eDateTimeOffset
-
DateOnly
eTimeOnly
Guid
- FileSystemInfo, FileInfo e DirectoryInfo
- enumerazioni
- matrici ed elenchi dei tipi elencati
Altri tipi non sono supportati, ma è possibile creare parser personalizzati. È anche possibile convalidare i valori analizzati, utile quando si vuole assicurarsi che l'input soddisfi determinati criteri.
Validatori
Ogni opzione, argomento e comando può avere uno o più validator. I validator vengono usati per garantire che il valore analizzato soddisfi determinati criteri. Ad esempio, è possibile verificare che un numero sia positivo o che una stringa non sia vuota. È anche possibile creare validator complessi che controllano più condizioni.
Ogni tipo di simbolo in System.CommandLine ha una Validators
proprietà che contiene un elenco di validator. I validator vengono eseguiti dopo l'analisi dell'input e possono segnalare un errore se la convalida non riesce.
Per fornire codice di convalida personalizzato, chiamare System.CommandLine.Option.Validators.Add
sull'opzione o sull'argomento (o comando), come mostrato nell'esempio seguente.
Option<int> delayOption = new("--delay");
delayOption.Validators.Add(result =>
{
if (result.GetValue(delayOption) < 1)
{
result.AddError("Must be greater than 0");
}
});
System.CommandLine fornisce un set di validator predefiniti che possono essere usati per convalidare i tipi comuni:
-
AcceptExistingOnly
: configura l'opzione o l'argomento specificato per accettare solo i valori corrispondenti a un file o a una directory esistente. -
AcceptLegalFileNamesOnly
: configura l'opzione o l'argomento specificato per accettare solo valori che rappresentano nomi di file legali. -
AcceptOnlyFromAmong
: configura l'opzione o l'argomento specificato per accettare solo i valori di un set specificato di valori.
Parser personalizzati
I parser personalizzati sono necessari per analizzare i tipi senza parser predefinito, ad esempio tipi complessi. Possono anche essere usati per analizzare i tipi supportati in modo diverso rispetto ai parser predefiniti.
Si supponga di avere un Person
tipo:
public class Person
{
public string? FirstName { get; set; }
public string? LastName { get; set; }
}
È possibile leggere i valori e creare un'istanza di Person
nell'azione del comando.
rootCommand.SetAction(parseResult =>
{
Person person = new()
{
FirstName = parseResult.GetValue(firstNameOption),
LastName = parseResult.GetValue(lastNameOption)
};
DoRootCommand(parseResult.GetValue(fileOption), person);
});
Con un parser personalizzato, è possibile ottenere un tipo personalizzato nello stesso modo in cui si ottengono valori primitivi:
Option<Person?> personOption = new("--person")
{
Description = "An option whose argument is parsed as a Person",
CustomParser = result =>
{
if (result.Tokens.Count != 2)
{
result.AddError("--person requires two arguments");
return null;
}
return new Person
{
FirstName = result.Tokens.First().Value,
LastName = result.Tokens.Last().Value
};
}
};
Se si vuole analizzare e convalidare l'input, usare il CustomParser
delegato , come illustrato nell'esempio seguente:
Option<int> delayOption = new("--delay")
{
Description = "An option whose argument is parsed as an int.",
CustomParser = result =>
{
if (!result.Tokens.Any())
{
return 42;
}
if (int.TryParse(result.Tokens.Single().Value, out var delay))
{
if (delay < 1)
{
result.AddError("Must be greater than 0");
}
return delay;
}
else
{
result.AddError("Not an int.");
return 0; // Ignored.
}
}
};
Ecco alcuni esempi di operazioni che è possibile eseguire con CustomParser
che non si possono fare con un validator:
- Analizzare altri tipi di stringhe di input( ad esempio, analizzare "1,2,3" in
int[]
). - Arità dinamica. Ad esempio, se sono presenti due argomenti definiti come matrici di stringhe e è necessario gestire una sequenza di stringhe nell'input della riga di comando, il
System.CommandLine.Parsing.ArgumentResult.OnlyTake
metodo consente di dividere dinamicamente le stringhe di input tra gli argomenti.