コード例 #1
0
        void FormatEnum(ulong enumValue, DmdType type)
        {
            Debug.Assert(type.IsEnum);
            var enumInfo = EnumInfo.GetEnumInfo(type);

            if (enumInfo.HasFlagsAttribute && enumValue != 0)
            {
                var  f       = enumValue;
                bool needSep = false;
                foreach (var info in enumInfo.FieldInfos)
                {
                    var flag = info.Value;
                    if ((f & flag) == 0)
                    {
                        continue;
                    }
                    if (needSep)
                    {
                        WriteEnumSeperator();
                    }
                    needSep = true;
                    WriteEnumField(info.Field);
                    f &= ~flag;
                    if (f == 0)
                    {
                        break;
                    }
                }
                if (f != 0)
                {
                    if (needSep)
                    {
                        WriteEnumSeperator();
                    }
                    WriteEnumInteger(type, f);
                }
                if (needSep)
                {
                    WriteRawValue(enumValue, type);
                }
            }
            else
            {
                bool printed = false;
                foreach (var info in enumInfo.FieldInfos)
                {
                    if (info.Value == enumValue)
                    {
                        WriteEnumField(info.Field);
                        WriteRawValue(enumValue, type);
                        printed = true;
                        break;
                    }
                }
                if (!printed)
                {
                    WriteEnumInteger(type, enumValue);
                }
            }
        }