/// <typeparam name="TEnum">Members should be bit indices, not literal flag values</typeparam> /// <param name="valueSeperator">regex pattern used to seperate values</param> public bool?GetFlagsValue <TEnum>(string valueName, ref BitVector32 retVal , string valueSeperator = ",", bool logFailures = true) where TEnum : struct, IComparable, IFormattable, IConvertible { object value = TryGetValueForName(valueName); if (value == null) { return(null); } bool?result = null; switch (Type.GetTypeCode(value.GetType())) { case TypeCode.String: result = retVal.TryParseFlags <TEnum>((string)value, valueSeperator, logFailures ? JsonNodeGlobals.gErrorsOutputList : null); break; case TypeCode.Object: { if (!(value is List <object> objList)) { return(false); } result = retVal.TryParseFlags <TEnum>(objList.OfType <string>(), logFailures ? JsonNodeGlobals.gErrorsOutputList : null); break; } default: return(false); } if (logFailures && JsonNodeGlobals.gErrorsOutputList.Count > 0) { Debug.Trace.IO.TraceDataSansId(System.Diagnostics.TraceEventType.Error, string.Format(Util.InvariantCultureInfo, "Failed parsing {0} value '{1}' as an {2}:\n{3}", valueName, value, "FLAGS", JsonNodeGlobals.gErrorsOutputList.Join("\n"))); JsonNodeGlobals.gErrorsOutputList.Clear(); } return(result); }