CommunityToolkit / CommunityToolkit/dotnet

Feature request: Guard.IsDefined<TEnum>()

Offen
#482 1 Kommentar 12 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
feature request :mailbox_with_mail:
Vorherrschende Sprache
C#
Sterne
3.8k
Forks
400
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

### Overview

I've thoroughly enjoyed the usefulness of the `Guard` API, but one thing it's missing is enum validation (for non-flags enums).

The one issue is that the generic `Enum.IsDefined<>` seems to only be available from .NET 5 onwards, which might be the reason this API hasn't made its way yet to the library, and whether silently boxing the value in pre-NET5 builds is an acceptable thing to do for parameter validation.

### API breakdown

Example:

```cs
public static void IsDefined(TEnum value, [CallerArgumentExpression("value")] string name = "")
where TEnum : struct, Enum
{
if (Enum.IsDefined(value))
return;

ThrowHelper.ThrowArgumentOutOfRangeException(name, value, null); // or a descriptive message
}
```

### Usage example

```cs
public class Something
{
public DayOfWeek Value { get; }

public Something(DayOfWeek value)
{
Guard.IsDefined(value);

Value = value;
}
}
```

### Breaking change?

No

### Alternatives

User can call `IsDefined` and `ThrowArgumentOutOfRangeException` or `ThrowArgumentException` directly.

### Additional context

Not sure if `IsDefined` or `IsEnumDefined` is a better value.

### Help us help you

Yes, I'd like to be assigned to work on this item

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginnen Sie beim IsDefined-Einstiegspunkt der Guard API und prüfen Sie, wie ThrowHelper die Argumentvalidierung über die unterstützten .NET-Ziele hinweg behandelt. Bestätigen Sie das generische Enum-Validierungsverhalten für Nicht-Flags-Enums und fügen Sie Abdeckung für definierte und nicht definierte Werte hinzu; als erledigt gilt, dass die vorgeschlagene Guard.IsDefined-Verwendung ohne eine Breaking Change funktioniert.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
csharp
Bereich
developer-experience
Issue-Typ
Feature
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

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