当前位置: 首页>>代码示例>>C#>>正文


C# IType.GetEnumUnderlyingType方法代码示例

本文整理汇总了C#中IType.GetEnumUnderlyingType方法的典型用法代码示例。如果您正苦于以下问题:C# IType.GetEnumUnderlyingType方法的具体用法?C# IType.GetEnumUnderlyingType怎么用?C# IType.GetEnumUnderlyingType使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在IType的用法示例。


在下文中一共展示了IType.GetEnumUnderlyingType方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: GetEnumToStringMethod

        public static void GetEnumToStringMethod(
                    IType enumType,
                    ITypeResolver typeResolver,
                    out object[] code,
                    out IList<object> tokenResolutions,
                    out IList<IType> locals,
                    out IList<IParameter> parameters)
        {
            Debug.Assert(enumType.ToNormal().IsEnum, "This is for enum only");

            var codeList = new List<object>();

            codeList.Add(Code.Ldarg_0);
            codeList.AppendInt(Code.Ldfld, 1);

            var sizeOfEnum = enumType.GetEnumUnderlyingType().IntTypeBitSize() / 8;

            // build cmp/jmp cases
            var stringValues = 1;
            foreach (var enumConstValue in IlReader.Fields(enumType, typeResolver).Where(f => f.IsConst))
            {
                codeList.Add(Code.Dup);
                if (sizeOfEnum == 8)
                {
                    codeList.AppendULong(
                        Code.Ldc_I8, enumConstValue.ConstantValue.ToString() == "-1" ? 0xffffffffffffffff : Convert.ToUInt64(enumConstValue.ConstantValue));
                }
                else
                {
                    codeList.AppendUInt(Code.Ldc_I4, unchecked((uint)Convert.ToInt64(enumConstValue.ConstantValue)));
                }

                codeList.Add(Code.Bne_Un_S);
                codeList.Add(6);
                codeList.AppendInt(Code.Ldstr, ++stringValues);
                codeList.Add(Code.Ret);
            }

            codeList.Add(Code.Pop);
            codeList.AppendInt(Code.Ldstr, ++stringValues);
            codeList.Add(Code.Ret);

            // End of Code
            // tokens
            tokenResolutions = new List<object>();
            // data
            tokenResolutions.Add(enumType.GetFieldByName("Value", typeResolver));
            foreach (var enumConstValue in IlReader.Fields(enumType, typeResolver).Where(f => f.IsConst))
            {
                tokenResolutions.Add(enumConstValue.Name);
            }

            // default value
            tokenResolutions.Add(string.Empty);

            // locals
            locals = new List<IType>();

            // code
            code = codeList.ToArray();

            // parameters
            parameters = new List<IParameter>();
        }
开发者ID:afrog33k,项目名称:csnative,代码行数:64,代码来源:EnumGen.cs

示例2: GetFields

 public static IEnumerable<IField> GetFields(IType enumType, ITypeResolver typeResolver)
 {
     Debug.Assert(enumType.IsEnum, "This is for enum arrays only");
     yield return enumType.GetEnumUnderlyingType().ToField(enumType, "Value");
 }
开发者ID:afrog33k,项目名称:csnative,代码行数:5,代码来源:EnumGen.cs


注:本文中的IType.GetEnumUnderlyingType方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。