Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penting
System.CommandLine
saat ini dalam PRATINJAU, dan dokumentasi ini untuk versi 2.0 beta 5.
Beberapa informasi berkaitan dengan produk prarilis yang mungkin dimodifikasi secara substansial sebelum dirilis. Microsoft tidak memberikan jaminan, tersurat maupun tersirat, sehubungan dengan informasi yang diberikan di sini.
Secara default, System.CommandLine menyediakan sekumpulan pengurai bawaan yang dapat mengurai banyak jenis umum:
bool
-
byte
dansbyte
-
short
danushort
-
int
danuint
-
long
danulong
-
float
dandouble
decimal
-
DateTime
danDateTimeOffset
-
DateOnly
danTimeOnly
Guid
- FileSystemInfo, FileInfo, dan DirectoryInfo
- enum
- berbagai array dan daftar dari jenis-jenis yang telah disebutkan
Jenis lain tidak didukung, tetapi Anda dapat membuat pengurai kustom untuk mereka. Anda juga dapat memvalidasi nilai yang diurai, yang berguna saat Anda ingin memastikan bahwa input memenuhi kriteria tertentu.
Validator
Setiap opsi, argumen, dan perintah dapat memiliki satu atau beberapa validator. Validator digunakan untuk memastikan bahwa nilai yang diurai memenuhi kriteria tertentu. Misalnya, Anda dapat memvalidasi bahwa angka positif, atau bahwa string tidak kosong. Anda juga dapat membuat validator kompleks yang memeriksa terhadap beberapa kondisi.
Setiap jenis simbol di System.CommandLine memiliki Validators
properti yang berisi daftar validator. Validator dijalankan setelah input diurai, dan mereka dapat melaporkan kesalahan jika validasi gagal.
Untuk menyediakan kode validasi kustom, panggil System.CommandLine.Option.Validators.Add
opsi atau argumen Anda (atau perintah), seperti yang ditunjukkan dalam contoh berikut:
Option<int> delayOption = new("--delay");
delayOption.Validators.Add(result =>
{
if (result.GetValue(delayOption) < 1)
{
result.AddError("Must be greater than 0");
}
});
System.CommandLine menyediakan sekumpulan validator bawaan yang dapat digunakan untuk memvalidasi jenis umum:
-
AcceptExistingOnly
- mengonfigurasi opsi atau argumen yang diberikan untuk hanya menerima nilai yang sesuai dengan file atau direktori yang ada. -
AcceptLegalFileNamesOnly
- mengonfigurasi opsi atau argumen yang diberikan untuk hanya menerima nilai yang mewakili nama file hukum. -
AcceptOnlyFromAmong
- mengonfigurasi opsi atau argumen yang diberikan untuk hanya menerima nilai dari sekumpulan nilai tertentu.
Pengurai kustom
Pengurai kustom diperlukan untuk mengurai jenis tanpa pengurai default, seperti jenis kompleks. Mereka juga dapat digunakan untuk mengurai tipe yang didukung dengan cara yang berbeda dari pengurai bawaan.
Misalkan Anda memiliki Person
jenis:
public class Person
{
public string? FirstName { get; set; }
public string? LastName { get; set; }
}
Anda dapat membaca nilai dan membuat instans Person
dalam tindakan perintah:
rootCommand.SetAction(parseResult =>
{
Person person = new()
{
FirstName = parseResult.GetValue(firstNameOption),
LastName = parseResult.GetValue(lastNameOption)
};
DoRootCommand(parseResult.GetValue(fileOption), person);
});
Dengan pengurai kustom, Anda bisa mendapatkan jenis kustom dengan cara yang sama seperti Anda mendapatkan nilai primitif:
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
};
}
};
Jika Anda ingin mengurai serta memvalidasi input, gunakan CustomParser
delegasi, seperti yang ditunjukkan dalam contoh berikut:
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.
}
}
};
Berikut adalah beberapa contoh apa yang dapat Anda lakukan dengan CustomParser
yang tidak dapat Anda lakukan dengan validator:
- Uraikan jenis string input lainnya (misalnya, uraikan "1,2,3" ke dalam
int[]
). - Aritas dinamis. Misalnya, jika Anda memiliki dua argumen yang didefinisikan sebagai array string, dan Anda harus menangani urutan string dalam input baris perintah, metode ini
System.CommandLine.Parsing.ArgumentResult.OnlyTake
memungkinkan Anda membagi string input secara dinamis di antara argumen.