commandlineparser / commandlineparser/commandline

How can I assign TypeConverter to Enum in `Options`?

Offen
#944 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
C#
Sterne
4.8k
Forks
478
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

I've declared `Options` which will be used for parsing command line.
```csharp
public class Options {
// ...
[Option('o', "operation", HelpText = "")]
[TypeConverter(typeof(OperationConverter))]
public Operation Operation { get; set; }
}
```
And the `Operation` looks like this:
```csharp
[TypeConverter(typeof(OperationConverter))]
public enum Operation {
// ...
CreateDirectory,
// ...
}
```
Since `CreateDirectory` is quite long to type in command line, I want to allow `cd` as valid `Operation.CreateDirectory`
```csharp
public class OperationConverter : EnumConverter {
// ... candidates for other enum values
private static readonly List OperationCandidate = ["createdirectory", "cd"];

// ...
public override object ConvertFrom(ITypeDescriptorContext? ctx, CultureInfo? ci, object value) {
if (value is string s) {
string l = s.Trim().ToLowerInvariant();
// ...
if (OperationCandidate.Contains(l)) return Operation.CreateDirectory;
// ...
}
}
}
```
But I can't assign this `OperationConverter` to `Options.Operation`. I don't see anything that might be related to this.

#83 says it is resolved, but at the bottom of that issue, [someone](https://github.com/commandlineparser/commandline/issues/83#issuecomment-671916065) said:
> I dont think this works in the latest version. I tried annotating my option's property, but the converter is not invoked. Instead I had to register it using `TypeDescriptor.AddAttributes()`.

But I don't see any methods named `.AddAttributes()` in [`TypeDescriptor`](https://github.com/commandlineparser/commandline/wiki/T_CommandLine_Core_TypeDescriptor). [this](https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.typedescriptor?view=netframework-4.8.1#methods) has `.AddAttributes()`, but this doesn't seem to work.
```csharp
private static void Main(string[] args) {
// ...
TypeDescriptor.AddAttributes(typeof(Operation), new TypeConverterAttribute(typeof(OperationConverter)));
// other logic + command line parsing
}
```

Now I'm completely lost. Wiki doesn't provide any useful information that I can easily access.

How can I assign TypeConverter to Enum in Options?

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.