commandlineparser / commandlineparser/commandline
"InvalidOperationException: appears to be Immutable with invalid constructor" when suppling invalid (throwable) args
- Ngôn ngữ chính
- C#
- Star
- 4.8k
- Fork
- 478
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
# Description
When calling constructor with single string, if the constructor throws - the result of parsing is also throwing (misleading) exception instead of returning error lambda.
# Minimal reproducable code:
````csharp
using System;
using System.Globalization;
using CommandLine;
class Program
{
[Verb("test")]
public class Options
{
private CultureInfo _localization;
[Option('l', "lang", Required = true, Default = "en")]
public CultureInfo Localization => _localization;
public Options(CultureInfo localization)
{
_localization = localization;
}
}
static void Main(string[] args)
{
var types = new Type[] { typeof(Options) };
var result = Parser.Default.ParseArguments(args, types);
result
.WithParsed(obj => {})
.WithNotParsed(errs => {});
}
}
````
Call with: `test -l "FooBar"`
# Expected behaviour
The `WithNotParsed` lambda should be called with error message pointing to invalid argument
# Actual behaviour
The line with `var result = Parser.Default.ParseArguments(args, types);` throws:
`System.InvalidOperationException: 'Type Program+Options appears to be Immutable with invalid constructor. Check that constructor arguments have the same name and order of their underlying Type. Constructor Parameters can be ordered as: '(localization)''`
# Additional info:
When called with `test -l "en-US"` the code will correctly enter `WithParsed` lambda.
# Version data:
- Tested on Windows / .NET Framework 4.7.2
- Tested on version 2.8.0 from NuGet of CommandLineParser
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Hướng nghiên cứu
Bắt đầu với chương trình C# tối thiểu có thể tái hiện lỗi và lệnh gọi Parser.Default.ParseArguments sử dụng test -l "FooBar"; so sánh với trường hợp "en-US" đang hoạt động. Bản sửa được hoàn tất khi một đối số hàm khởi tạo không hợp lệ tạo ra lỗi được truyền đến WithNotParsed thay vì ném InvalidOperationException.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- csharp
- Lĩnh vực
- cli
- Loại issue
- Lỗi
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức phù hợp với người mới
- 45/100