Tôi đang cố gắng chỉ định một lá cờ bằng cách sử dụng Trình phân tích lệnh thư viện
Tôi đang cố gắng sử dụng thư viện CommandLineParser để chỉ định một cờ
[Tùy chọn('d', "nội dung", Bắt buộc = false, HelpText = "\n (Bắt buộc) Đường dẫn đến tệp nội dung.")]
công khai String? ContentFile { lấy; đặt; }
[Tùy chọn('e', "mở rộng", Bắt buộc = false, Mặc định = false, HelpText = "Có phải là thao tác mở rộng hay không")]
public bool? Mở rộng { lấy; đặt; }
Lệnh thực hiện
\a.exe --mở rộng --nội dung kdssign.deps.json
Thực hiện lệnh\a.exe --extend --content kdssign.deps.json
Nếu tôi di chuyển "--extend" đến cuối thì Execption không được đưa ra nhưng biến Extend vẫn không được thiết lập.
Nếu tôi di chuyển "--extend" đến cuối, Exection sẽ không được kích hoạt, nhưng biến extend vẫn chưa được thiết lập.
Kỳ vọng của tôi là nếu --extend được cung cấp từ dòng lệnh thì nó sẽ được thiết lập mà không cần chờ bất kỳ giá trị nào được cung cấp.
Tôi mong đợi rằng nếu --extend được cung cấp từ dòng lệnh thì nó sẽ tự thiết lập mà không cần chờ bất kỳ giá trị nào được cung cấp.
Thêm câu trả lời
Cái mà trình phân tích cú pháp dòng lệnh? Có rất nhiều trình phân tích cú pháp CLI được viết bằng C#. .NET's own Hệ thống.CommandLine không sử dụng thuộc tính
Trình phân tích dòng lệnh nào? Có nhiều trình phân tích cú pháp CLI được viết bằng C#. System.CommandLine của NET không sử dụng các thuộc tính
Bạn có chắc chắn cờ không được đặt thành mặc định của loại không, tức là vô giá trị
? Bạn đã thử với công khai bool Mở rộng
? Rốt cuộc, nếu sự vắng mặt của lá cờ có nghĩa là nó SAI
, thuộc tính không bao giờ được để giá trị null. BTW ví dụ Quickstart sử dụng public bool Chi tiết { lấy; đặt; }
với Bắt buộc=sai
để chỉ định một lá cờ. SAI
đã là mặc định
Bạn có chắc chắn cờ không được đặt thành giá trị mặc định (null) cho loại này không? Bạn đã thử public bool Extend chưa? Suy cho cùng, nếu việc không có cờ có nghĩa là nó sai, thì thuộc tính đó không bao giờ được để giá trị null. Nhân tiện, ví dụ Quickstart sử dụng public bool Verbose{get; set;} và Required=false để chỉ định cờ. false đã là giá trị mặc định
Tôi nghĩ vấn đề là chỉ thiết lập extend thành nullable. Sau khi tôi xóa tính năng nullable thì nó bắt đầu hoạt động, cảm ơn.
Tôi nghĩ vấn đề là thiết lập extend chỉ có giá trị null. Sau khi tôi xóa chức năng chấp nhận giá trị null thì nó bắt đầu hoạt động, cảm ơn.
Câu trả lời tuyệt vời được đề xuất
Sử dụng công khai bool Mở rộng { lấy; đặt; }
thay vì bool
. Các cờ trong CommandLineParser được hỗ trợ thông qua bool
thuộc tính. Nếu cờ bị thiếu, thuộc tính sẽ mặc định là sai. bool?
mặt khác có thể có ba giá trị: mặc định là null, true hoặc false.
Sử dụng public Boolean extends {get; set;} thay vì Boolean. Các cờ trong CommandLineParser được hỗ trợ thông qua thuộc tính boolean. Nếu cờ bị thiếu, thuộc tính này mặc định là sai. La ó? Mặt khác có thể có ba giá trị: giá trị mặc định là null, true hoặc false.
Các ví dụ khởi động nhanh của thư viện hiển thị cách sử dụng cờ:
Ví dụ khởi động nhanh của thư viện cho thấy cách sử dụng cờ:
lớp công khai Tùy chọn
{
[Tùy chọn('v', "chi tiết", Bắt buộc = sai, HelpText = "Đặt đầu ra thành thông báo chi tiết.")]
public bool Chi tiết { lấy; đặt; }
}
void tĩnh Main(string[] args)
{
Parser.Default.ParseArguments(đối số)
.WithParsed(o =>
{
nếu (o. Chi tiết)
{
Console.WriteLine($"Cho phép xuất ra chi tiết. Đối số hiện tại: -v {o.Verbose}");
Console.WriteLine("Ví dụ khởi động nhanh! Ứng dụng đang ở chế độ chi tiết!");
}
khác
{
Console.WriteLine($"Các đối số hiện tại: -v {o.Verbose}");
Console.WriteLine("Ví dụ khởi động nhanh!");
}
});
}
Thêm câu trả lời
Tôi là một lập trình viên xuất sắc, rất giỏi!