string UlongValueToStringFlags(ulong value)
{
var workingValue = value;
var index = _pairs.Count - 1;
var stringBuilder = new StringBuilder();
var isFirstText = true;
while (index >= 0)
{
var currentValue = _pairs[index].Value;
if ((index == 0) && (currentValue == 0L))
{
break;
}
if ((workingValue & currentValue) == currentValue)
{
workingValue -= currentValue;
if (!isFirstText)
{
stringBuilder.Insert(0, ", ");
}
stringBuilder.Insert(0, _pairs[index].Key);
isFirstText = false;
}
index--;
}
if (workingValue != 0L)
{
return UlongValueToStringAsNumber(value);
}
if (value != 0)
{
return stringBuilder.ToString();
}
if ((_pairs.Count > 0) && (_pairs[0].Value == 0))
{
return _pairs[0].Key;
}
return "0";
}