1515namespace Open . Text ;
1616
1717/// <summary>
18- /// A case struct representing an enum value that can be implicitly coerced from a string.
18+ /// A struct representing an enum value that can be implicitly coerced from a string.
1919/// </summary>
2020/// <remarks>String parsing or coercion is case sensitive and must be exact.</remarks>
2121[ SuppressMessage ( "Usage" , "CA2225:Operator overloads have named alternates" , Justification = "Already exposes via a property." ) ]
@@ -35,29 +35,25 @@ public readonly struct EnumValue<TEnum>
3535 public static Type UnderlyingType => _underlyingType ??= Enum . GetUnderlyingType ( typeof ( TEnum ) ) ;
3636
3737 /// <summary>
38- /// Constructs an EnumValue<<typeparamref name=" TEnum"/>> using the provided enum value.
38+ /// Constructs an <see cref="EnumValue{ TEnum} "/> using the provided <typeparamref name="TEnum"/> value.
3939 /// </summary>
4040 public EnumValue ( TEnum value )
41- {
42- Value = value ;
43- }
41+ => Value = value ;
4442
4543 /// <summary>
46- /// Parses the string value to construct an EnumValue<<typeparamref name=" TEnum"/>> instance .
44+ /// Parses the <paramref name=" value"/> to construct an <see cref="EnumValue{ TEnum} "/>.
4745 /// </summary>
4846 /// <exception cref="ArgumentNullException">value is null.</exception>
4947 public EnumValue ( StringSegment value )
50- {
51- Value = EnumValue . Parse < TEnum > ( value ) ;
52- }
48+ => Value = EnumValue . Parse < TEnum > ( value ) ;
5349
5450 /// <summary>
55- /// The enum value that this represents.
51+ /// The <typeparamref name="TEnum"/> value that this represents.
5652 /// </summary>
5753 public readonly TEnum Value { get ; }
5854
5955 /// <summary>
60- /// Returns the string representation of the enum value.
56+ /// Returns the <see cref=" string"/> representation of the enum value.
6157 /// </summary>
6258 [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
6359 public override string ToString ( ) => NameLookup ( Value ) ;
@@ -264,49 +260,58 @@ internal static Entry[]?[] Lookup
264260 ( ) => CreateLookup ( ) ) ! ;
265261
266262 /// <summary>
267- /// Indicates whether this instance matches the enum value of <paramref name="other"/>.
263+ /// Indicates whether this instance matches the <typeparamref name="TEnum"/> value of <paramref name="other"/>.
268264 /// </summary>
269- /// <returns>true if <paramref name="other"/>'s enum value and this instance's enum value are the same; otherwise false.</returns>
270- public bool Equals ( EnumValue < TEnum > other ) => Value . Equals ( other . Value ) ;
265+ /// <returns>true if <paramref name="other"/>'s <typeparamref name="TEnum"/> value and this instance's <typeparamref name="TEnum"/> value are the same; otherwise false.</returns>
266+ public bool Equals ( EnumValue < TEnum > other )
267+ => Value . Equals ( other . Value ) ;
271268
272269 /// <summary>
273- /// Compares an EnumValue and EnumValueCaseIgnored for enum equality.
270+ /// Compares an <see cref=" EnumValue{TEnum}"/> and <see cref=" EnumValueCaseIgnored{TEnum}"/> for <typeparamref name="TEnum"/> equality.
274271 /// </summary>
275- public static bool operator == ( EnumValue < TEnum > left , EnumValue < TEnum > right ) => left . Value . Equals ( right . Value ) ;
272+ public static bool operator == ( EnumValue < TEnum > left , EnumValue < TEnum > right )
273+ => left . Value . Equals ( right . Value ) ;
276274
277275 /// <summary>
278- /// Compares an EnumValue and EnumValueCaseIgnored for enum inequality.
276+ /// Compares an <see cref=" EnumValue{TEnum}"/> and <see cref=" EnumValueCaseIgnored{TEnum}"/> for <typeparamref name="TEnum"/> inequality.
279277 /// </summary>
280- public static bool operator != ( EnumValue < TEnum > left , EnumValue < TEnum > right ) => ! left . Value . Equals ( right . Value ) ;
278+ public static bool operator != ( EnumValue < TEnum > left , EnumValue < TEnum > right )
279+ => ! left . Value . Equals ( right . Value ) ;
281280
282281 /// <inheritdoc cref="Equals(EnumValue{TEnum})"/>
283- public bool Equals ( EnumValueCaseIgnored < TEnum > other ) => Value . Equals ( other . Value ) ;
282+ public bool Equals ( EnumValueCaseIgnored < TEnum > other )
283+ => Value . Equals ( other . Value ) ;
284284
285285 /// <summary>
286- /// Compares two EnumValue for enum equality.
286+ /// Compares two <see cref=" EnumValue{TEnum}"/> for <typeparamref name="TEnum"/> equality.
287287 /// </summary>
288- public static bool operator == ( EnumValue < TEnum > left , EnumValueCaseIgnored < TEnum > right ) => left . Value . Equals ( right . Value ) ;
288+ public static bool operator == ( EnumValue < TEnum > left , EnumValueCaseIgnored < TEnum > right )
289+ => left . Value . Equals ( right . Value ) ;
289290
290291 /// <summary>
291- /// Compares two EnumValue for enum inequality.
292+ /// Compares two <see cref=" EnumValue{TEnum}"/> for <typeparamref name="TEnum"/> inequality.
292293 /// </summary>
293- public static bool operator != ( EnumValue < TEnum > left , EnumValueCaseIgnored < TEnum > right ) => ! left . Value . Equals ( right . Value ) ;
294+ public static bool operator != ( EnumValue < TEnum > left , EnumValueCaseIgnored < TEnum > right )
295+ => ! left . Value . Equals ( right . Value ) ;
294296
295297 /// <summary>
296298 /// Indicates whether this instance matches the provided enum <paramref name="other"/>.
297299 /// </summary>
298300 /// <returns>true if <paramref name="other"/> and this instance's enum value are the same; otherwise false.</returns>
299- public bool Equals ( TEnum other ) => Value . Equals ( other ) ;
301+ public bool Equals ( TEnum other )
302+ => Value . Equals ( other ) ;
300303
301304 /// <summary>
302- /// Compares an EnumValue and an enum value for enum equality .
305+ /// Compares an <see cref=" EnumValue{TEnum}"/> and a <typeparamref name="TEnum"/> value forequality .
303306 /// </summary>
304- public static bool operator == ( EnumValue < TEnum > left , TEnum right ) => left . Value . Equals ( right ) ;
307+ public static bool operator == ( EnumValue < TEnum > left , TEnum right )
308+ => left . Value . Equals ( right ) ;
305309
306310 /// <summary>
307- /// Compares an EnumValue and an enum value for enum inequality.
311+ /// Compares an <see cref=" EnumValue{TEnum}"/> and a <typeparamref name="TEnum"/> value for inequality.
308312 /// </summary>
309- public static bool operator != ( EnumValue < TEnum > left , TEnum right ) => ! left . Value . Equals ( right ) ;
313+ public static bool operator != ( EnumValue < TEnum > left , TEnum right )
314+ => ! left . Value . Equals ( right ) ;
310315
311316 /// <inheritdoc />
312317 public override bool Equals ( object ? obj )
@@ -318,23 +323,28 @@ public override bool Equals(object? obj)
318323 public override int GetHashCode ( ) => Value . GetHashCode ( ) ;
319324
320325 /// <summary>
321- /// Implicitly converts an EnumValueCaseInsensitive to an EnumValue.
326+ /// Implicitly converts an <see cref="EnumValueCaseIgnored{TEnum}"/> to an <see cref=" EnumValue{TEnum}"/> .
322327 /// Before conversion they are already equivalent.
323328 /// </summary>
324329 public static implicit operator EnumValue < TEnum > ( EnumValueCaseIgnored < TEnum > value ) => new ( value . Value ) ;
325330
326331 /// <summary>
327- /// Implicitly returns the actual enum contained by the EnumValue.
332+ /// Implicitly returns the actual enum contained by the <see cref=" EnumValue{TEnum}"/> .
328333 /// </summary>
329334 public static implicit operator TEnum ( EnumValue < TEnum > value ) => value . Value ;
330335
331336 /// <summary>
332- /// Implicitly converts an string to an EnumValue of enum type TEnum.
337+ /// Implicitly converts an <typeparamref name="TEnum"/> to an <see cref="EnumValue{TEnum}"/>.
338+ /// </summary>
339+ public static implicit operator EnumValue < TEnum > ( TEnum value ) => new ( value ) ;
340+
341+ /// <summary>
342+ /// Implicitly converts a <see cref="string"/> to an <see cref="EnumValue{TEnum}"/>.
333343 /// </summary>
334344 public static implicit operator EnumValue < TEnum > ( StringSegment value ) => new ( value ) ;
335345
336346 /// <summary>
337- /// Implicitly converts an string to an EnumValue of enum type TEnum.
347+ /// Implicitly converts a <see cref=" string"/> to an <see cref="EnumValue{ TEnum}"/> .
338348 /// </summary>
339349 public static implicit operator EnumValue < TEnum > ( string value ) => new ( value ) ;
340350
@@ -385,21 +395,15 @@ public readonly struct EnumValueCaseIgnored<TEnum>
385395 where TEnum : Enum
386396{
387397 /// <summary>
388- /// Constructs an EnumValueCaseIgnored<<typeparamref name=" TEnum"/>> using the provided enum value.
398+ /// Constructs an <see cref="EnumValueCaseIgnored{ TEnum} "/> using the provided enum value.
389399 /// </summary>
390- public EnumValueCaseIgnored ( TEnum value )
391- {
392- Value = value ;
393- }
400+ public EnumValueCaseIgnored ( TEnum value ) => Value = value ;
394401
395402 /// <summary>
396- /// Parses the string value to construct an EnumValueCaseIgnored<<typeparamref name=" TEnum"/>> instance.
403+ /// Parses the string value to construct an <see cref="EnumValueCaseIgnored{ TEnum} "/> instance.
397404 /// </summary>
398405 /// <exception cref="ArgumentNullException"><paramref name="value"/> is null.</exception>
399- public EnumValueCaseIgnored ( StringSegment value )
400- {
401- Value = EnumValue . Parse < TEnum > ( value , true ) ;
402- }
406+ public EnumValueCaseIgnored ( StringSegment value ) => Value = EnumValue . Parse < TEnum > ( value , true ) ;
403407
404408 /// <inheritdoc cref="EnumValue{TEnum}.Value"/>
405409 public readonly TEnum Value { get ; }
@@ -411,12 +415,12 @@ public EnumValueCaseIgnored(StringSegment value)
411415 public bool Equals ( EnumValue < TEnum > other ) => Value . Equals ( other . Value ) ;
412416
413417 /// <summary>
414- /// Compares an EnumValueCaseIgnored and EnumValue for enum equality.
418+ /// Compares an <see cref=" EnumValueCaseIgnored{TEnum}"/> and <see cref=" EnumValue{TEnum}"/> for <typeparamref name="TEnum"/> equality.
415419 /// </summary>
416420 public static bool operator == ( EnumValueCaseIgnored < TEnum > left , EnumValue < TEnum > right ) => left . Value . Equals ( right . Value ) ;
417421
418422 /// <summary>
419- /// Compares an EnumValueCaseIgnored and EnumValue for enum inequality.
423+ /// Compares an <see cref=" EnumValueCaseIgnored{TEnum}"/> and <see cref=" EnumValue{TEnum}"/> for <typeparamref name="TEnum"/> inequality.
420424 /// </summary>
421425 public static bool operator != ( EnumValueCaseIgnored < TEnum > left , EnumValue < TEnum > right )
422426 => ! left . Value . Equals ( right . Value ) ;
@@ -426,13 +430,13 @@ public bool Equals(EnumValueCaseIgnored<TEnum> other)
426430 => Value . Equals ( other . Value ) ;
427431
428432 /// <summary>
429- /// Compares two EnumValueCaseIgnored for enum equality.
433+ /// Compares two <see cref=" EnumValueCaseIgnored{TEnum}"/> for <typeparamref name="TEnum"/> equality.
430434 /// </summary>
431435 public static bool operator == ( EnumValueCaseIgnored < TEnum > left , EnumValueCaseIgnored < TEnum > right )
432436 => left . Value . Equals ( right . Value ) ;
433437
434438 /// <summary>
435- /// Compares two EnumValueCaseIgnored for enum inequality.
439+ /// Compares two <see cref=" EnumValueCaseIgnored{TEnum}"/> for <typeparamref name="TEnum"/> inequality.
436440 /// </summary>
437441 public static bool operator != ( EnumValueCaseIgnored < TEnum > left , EnumValueCaseIgnored < TEnum > right )
438442 => ! left . Value . Equals ( right . Value ) ;
@@ -442,13 +446,13 @@ public bool Equals(TEnum other)
442446 => Value . Equals ( other ) ;
443447
444448 /// <summary>
445- /// Compares an EnumValueCaseIgnored and an enum value for enum equality.
449+ /// Compares an <see cref=" EnumValueCaseIgnored{TEnum}"/> and a <typeparamref name="TEnum"/> value for equality.
446450 /// </summary>
447451 public static bool operator == ( EnumValueCaseIgnored < TEnum > left , TEnum right )
448452 => left . Value . Equals ( right ) ;
449453
450454 /// <summary>
451- /// Compares an EnumValueCaseIgnored and an enum value for enum inequality.
455+ /// Compares an <see cref=" EnumValueCaseIgnored{TEnum}"/> and a <typeparamref name="TEnum"/> value for inequality.
452456 /// </summary>
453457 public static bool operator != ( EnumValueCaseIgnored < TEnum > left , TEnum right )
454458 => ! left . Value . Equals ( right ) ;
@@ -464,34 +468,40 @@ public override int GetHashCode()
464468 => Value . GetHashCode ( ) ;
465469
466470 /// <summary>
467- /// Implicitly converts an EnumValue to an EnumValueCaseInsensitive .
471+ /// Implicitly converts an <see cref=" EnumValue{TEnum}"/> to an <see cref="EnumValueCaseIgnored{TEnum}"/> .
468472 /// Before conversion they are already equivalent.
469473 /// </summary>
470474 public static implicit operator EnumValueCaseIgnored < TEnum > ( EnumValue < TEnum > value )
471475 => new ( value . Value ) ;
472476
473477 /// <summary>
474- /// Implicitly returns the actual enum contained by the EnumValueCaseIgnored.
478+ /// Implicitly returns the actual <typeparamref name="TEnum"/> contained by the <see cref=" EnumValueCaseIgnored{TEnum}"/> .
475479 /// </summary>
476480 public static implicit operator TEnum ( EnumValueCaseIgnored < TEnum > value )
477481 => value . Value ;
478482
479483 /// <summary>
480- /// Implicitly converts an string to an EnumValueCaseIgnored of enum type TEnum.
484+ /// Implicitly converts an <typeparamref name="TEnum"/> to an <see cref="EnumValue{TEnum}"/>.
485+ /// </summary>
486+ public static implicit operator EnumValueCaseIgnored < TEnum > ( TEnum value )
487+ => new ( value ) ;
488+
489+ /// <summary>
490+ /// Implicitly converts a <see cref="string"/> to an <see cref="EnumValueCaseIgnored{TEnum}"/>.
481491 /// </summary>
482492 public static implicit operator EnumValueCaseIgnored < TEnum > ( StringSegment value )
483493 => new ( value ) ;
484494
485495 /// <summary>
486- /// Implicitly converts an string to an EnumValueCaseIgnored of enum type TEnum.
496+ /// Implicitly converts a <see cref=" string"/> to an <see cref="EnumValueCaseIgnored{ TEnum}"/> .
487497 /// </summary>
488498 public static implicit operator EnumValueCaseIgnored < TEnum > ( string value )
489499 => new ( value ) ;
490500
491501 private string GetDebuggerDisplay ( )
492502 {
493503 var eType = typeof ( TEnum ) ;
494- return $ "{ eType . Name } .{ Value } [EnumValueCaseIgnored<{ eType . FullName } >]";
504+ return $ "{ eType . Name } .{ ToString ( ) } [EnumValueCaseIgnored<{ eType . FullName } >]";
495505 }
496506}
497507
0 commit comments