public static IEnumerable<string> SplitNameParts(string str)
{
var sb = new StringBuilder();
foreach (var c in str)
{
if( (char.IsUpper(c)
|| c == '_')
&& sb.Length > 0
)
{
yield return sb.ToString();
sb = new StringBuilder();
}
if(c != '_') sb.Append(c);
}
if(sb.Length > 0)
{
yield return sb.ToString();
}
}