CommunityToolkit / CommunityToolkit/dotnet
Feature request: Guard.IsDefined<TEnum>()
- 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
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