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


C# Reflection.GetCustomAttributes方法代码示例

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


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

示例1: GetApplicableDebuggerDisplayAttribute

        private static DebuggerDisplayAttribute GetApplicableDebuggerDisplayAttribute(Ref.MemberInfo member)
        {
            var result = (DebuggerDisplayAttribute)member.GetCustomAttributes(typeof(DebuggerDisplayAttribute), inherit: true).FirstOrDefault();
            if (result != null)
            {
                return result;
            }

            // TODO (tomat): which assembly should we look at for dd attributes?
            Type type = member as Type;
            if (type != null)
            {
                foreach (DebuggerDisplayAttribute attr in type.Assembly.GetCustomAttributes(typeof(DebuggerDisplayAttribute), inherit: true))
                {
                    if (IsApplicableAttribute(type, attr.Target, attr.TargetTypeName))
                    {
                        return attr;
                    }
                }
            }
            return null;
        }
开发者ID:GloryChou,项目名称:roslyn,代码行数:22,代码来源:ObjectFormatter.cs

示例2: ProcessField

        public void ProcessField(SysReflection.FieldInfo aField)
        {
            string xFieldName = LabelName.GetFullName(aField);
            xFieldName = DataMember.GetStaticFieldName(aField);
            if (Cosmos.Assembler.Assembler.CurrentInstance.DataMembers.Count(x => x.Name == xFieldName) == 0)
            {
                var xItemList = (from item in aField.GetCustomAttributes(false)
                                 where item.GetType().FullName == "ManifestResourceStreamAttribute"
                                 select item).ToList();

                object xItem = null;
                if (xItemList.Count > 0)
                    xItem = xItemList[0];
                string xManifestResourceName = null;
                if (xItem != null)
                {
                    var xItemType = xItem.GetType();
                    xManifestResourceName = (string)xItemType.GetField("ResourceName").GetValue(xItem);
                }
                if (xManifestResourceName != null)
                {
                    // todo: add support for manifest streams again
                    //string xFileName = Path.Combine(mOutputDir,
                    //                                (xCurrentField.DeclaringType.Assembly.FullName + "__" + xManifestResourceName).Replace(",",
                    //                                                                                                                       "_") + ".res");
                    var xTarget = new StringBuilder();
                    using (var xStream = aField.DeclaringType.Assembly.GetManifestResourceStream(xManifestResourceName))
                    {
                        if (xStream == null)
                        {
                            throw new Exception("Resource '" + xManifestResourceName + "' not found!");
                        }
                        xTarget.Append("0,");
                        // todo: abstract this array code out.
                        xTarget.Append((uint)InstanceTypeEnum.StaticEmbeddedArray);
                        xTarget.Append(",");
                        xTarget.Append((int)xStream.Length);
                        xTarget.Append(",");
                        xTarget.Append("1,");
                        while (xStream.Position < xStream.Length)
                        {
                            xTarget.Append(xStream.ReadByte());
                            xTarget.Append(",");
                        }
                        xTarget.Append(",");
                    }

                    Assembler.DataMembers.Add(new DataMember("___" + xFieldName + "___Contents",
                                                              "db",
                                                              xTarget));
                    Assembler.DataMembers.Add(new DataMember(xFieldName,
                                                              "dd",
                                                              "___" + xFieldName + "___Contents"));
                }
                else
                {
                    uint xTheSize;
                    //string theType = "db";
                    Type xFieldTypeDef = aField.FieldType;
                    if (!xFieldTypeDef.IsClass || xFieldTypeDef.IsValueType)
                    {
                        xTheSize = ILOp.SizeOfType(aField.FieldType);
                    }
                    else
                    {
                        xTheSize = 8;
                    }
                    byte[] xData = new byte[xTheSize];
                    try
                    {
                        object xValue = aField.GetValue(null);
                        if (xValue != null)
                        {
                            try
                            {
                                Type xTyp = xValue.GetType();
                                if (xTyp.IsEnum)
                                {
                                    xValue = Convert.ChangeType(xValue, Enum.GetUnderlyingType(xTyp));
                                }
                                if (xTyp.IsValueType)
                                {
                                    for (int x = 4; x < xTheSize; x++)
                                    {
                                        xData[x] = Marshal.ReadByte(xValue,
                                                                    x);
                                    }
                                }
                            }
                            catch
                            {
                            }
                        }
                    }
                    catch
                    {
                    }
                    Cosmos.Assembler.Assembler.CurrentInstance.DataMembers.Add(new DataMember(xFieldName, xData));
                }
            }
//.........这里部分代码省略.........
开发者ID:fanoI,项目名称:Cosmos,代码行数:101,代码来源:AppAssembler.cs


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