Improved Enum output - #63
Conversation
I noticed, that `Enum.GetName(Type, object)` prints gives empty string for values that are not defined in the enum. Those can exist in C#. The ways to create them are the `Enum.Parse` method and explicit conversion from numeric type `(EnumType)42`. And because this can lead to errors and confusions, it's especially important that they print out. Furthermore, empty string is even returned for combined values of enum, even though it has the [Flags] attribute (`EnumType.Flag1 | EnumType.Flag2`), if they're not named (`Flag1And2 = Flag1 | Flag2'). Proposed method of using `ToString()` solves both these issues by printing numeric value for unnamed values (e.g. `"42"`) and even recognizing when the enum is defined with `Flags` and the value consist of combination of them and providing list (e.g. `"Flag1, Flag2"`).
|
Hi @ThranMaru Many thanks for the PR. Can I ask you add some unit tests so we ensure we have covered all corner cases etc? cheers |
|
Good catch, and thanks for digging into this! You're right that The fix is simple: use public string Convert(object source)
{
return source.ToString();
}Why this covers both cases:
One thing worth mentioning: the original snippet had a Also, |
I noticed, that
Enum.GetName(Type, object)gives empty string for values that are not defined in the enum. Those can exist in C#. The ways to create them are theEnum.Parsemethod and explicit conversion from numeric type(EnumType)42. And because this can lead to errors and confusions, it's especially important that they print out.Furthermore, empty string is even returned for combined values of enum, even though it has the [Flags] attribute (
EnumType.Flag1 | EnumType.Flag2), if they're not named (Flag1And2 = Flag1 | Flag2).Proposed method of using
ToString()solves both these issues by printing numeric value for unnamed values (e.g."42") and even recognizing when the enum is defined withFlagsand the value consist of combination of them and providing list (e.g."Flag1, Flag2").