diff --git a/ICD.Common.Utils.Tests/EnumUtilsTest.cs b/ICD.Common.Utils.Tests/EnumUtilsTest.cs
index 6466262..44daa69 100644
--- a/ICD.Common.Utils.Tests/EnumUtilsTest.cs
+++ b/ICD.Common.Utils.Tests/EnumUtilsTest.cs
@@ -290,5 +290,17 @@ namespace ICD.Common.Utils.Tests
}
#endregion
+
+ #region Formatting
+
+ [TestCase(eTestFlagsEnum.A | eTestFlagsEnum.B | eTestFlagsEnum.C | (eTestFlagsEnum)8,
+ "A, B, C, 8")]
+ public void ToStringUndefinedTest(eTestFlagsEnum value, string expected)
+ {
+ string toString = EnumUtils.ToStringUndefined(value);
+ Assert.AreEqual(expected, toString);
+ }
+
+ #endregion
}
}
diff --git a/ICD.Common.Utils/EnumUtils.cs b/ICD.Common.Utils/EnumUtils.cs
index d8289fe..df98ed5 100644
--- a/ICD.Common.Utils/EnumUtils.cs
+++ b/ICD.Common.Utils/EnumUtils.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Text;
using ICD.Common.Properties;
using ICD.Common.Utils.Extensions;
#if SIMPLSHARP
@@ -756,5 +757,39 @@ namespace ICD.Common.Utils
}
#endregion
+
+ #region Formatting
+
+ ///
+ /// Builds a comma delimited string of the defined enum flags, followed by the numeric remainder.
+ ///
+ ///
+ ///
+ ///
+ public static string ToStringUndefined(T value)
+ where T : struct, IConvertible
+ {
+ if (!IsFlagsEnum())
+ return value.ToString();
+
+ long remainder = (int)(object)value;
+
+ StringBuilder output = new StringBuilder();
+ string format = "{0}";
+
+ foreach (T flag in GetFlagsExceptNone(value))
+ {
+ output.AppendFormat(format, flag);
+ remainder -= (int)(object)flag;
+ format = ", {0}";
+ }
+
+ if (remainder != 0)
+ output.AppendFormat(", {0}", remainder);
+
+ return output.ToString();
+ }
+
+ #endregion
}
}
diff --git a/ICD.Common.Utils/Extensions/EnumExtensions.cs b/ICD.Common.Utils/Extensions/EnumExtensions.cs
index 121321b..559bb7c 100644
--- a/ICD.Common.Utils/Extensions/EnumExtensions.cs
+++ b/ICD.Common.Utils/Extensions/EnumExtensions.cs
@@ -60,7 +60,7 @@ namespace ICD.Common.Utils.Extensions
}
///
- /// Returns the enum value as a
+ /// Returns the enum value as a ushort.
///
///
///
@@ -71,5 +71,17 @@ namespace ICD.Common.Utils.Extensions
{
return (ushort)(object)extends;
}
+
+ ///
+ /// Builds a comma delimited string of the defined enum flags, followed by the numeric remainder.
+ ///
+ ///
+ ///
+ ///
+ public static string ToStringUndefined(this T extends)
+ where T : struct, IConvertible
+ {
+ return EnumUtils.ToStringUndefined(extends);
+ }
}
}