本文整理汇总了C#中System.Reflection.ParameterInfo.GetCustomAttributesData方法的典型用法代码示例。如果您正苦于以下问题:C# ParameterInfo.GetCustomAttributesData方法的具体用法?C# ParameterInfo.GetCustomAttributesData怎么用?C# ParameterInfo.GetCustomAttributesData使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Reflection.ParameterInfo
的用法示例。
在下文中一共展示了ParameterInfo.GetCustomAttributesData方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetCustomAttributes
public static IList<CustomAttributeData> GetCustomAttributes(ParameterInfo target)
{
if (target == null)
throw new ArgumentNullException("target");
Contract.EndContractBlock();
return target.GetCustomAttributesData();
}
示例2: AppendParameterInfo
static private void AppendParameterInfo(ParameterInfo parameter, StringBuilder sb)
{
foreach (var attribute in parameter.GetCustomAttributesData())
{
// these are pseudo-custom attributes that are added by Reflection but don't appear in metadata as custom attributes:
if (attribute.AttributeType != typeof(OptionalAttribute) &&
attribute.AttributeType != typeof(InAttribute) &&
attribute.AttributeType != typeof(OutAttribute) &&
attribute.AttributeType != typeof(MarshalAsAttribute))
{
AppendCustomAttributeData(attribute, sb);
sb.Append(" ");
}
}
foreach (var modreq in parameter.GetRequiredCustomModifiers())
{
sb.Append("modreq(");
AppendType(modreq, sb);
sb.Append(") ");
}
foreach (var modopt in parameter.GetOptionalCustomModifiers())
{
sb.Append("modopt(");
AppendType(modopt, sb);
sb.Append(") ");
}
int length = sb.Length;
AppendParameterAttributes(sb, parameter.Attributes, all: false);
if (sb.Length > length)
{
sb.Append(" ");
}
AppendType(parameter.ParameterType, sb);
if (!string.IsNullOrWhiteSpace(parameter.Name)) // If this is not the 'return' parameter
{
sb.Append(" ");
sb.Append(parameter.Name);
var defaultValue = parameter.RawDefaultValue;
if (defaultValue != DBNull.Value)
{
AppendValue(defaultValue, sb);
}
}
}
示例3: GetCustomAttributes
public static IList<CustomAttributeData> GetCustomAttributes(ParameterInfo target)
{
if (target == null)
throw new ArgumentNullException(nameof(target));
return target.GetCustomAttributesData();
}
示例4: EnrichParameter
public void EnrichParameter(IProcessingContext context, ParameterInfo item)
{
GenerateAttributeElements(context, item.GetCustomAttributesData());
}
示例5: CopyParameterAttributes
/// <summary>
/// Copies parameter attributes. This is used to copy marshalling attributes and other relevant data.
/// </summary>
/// <param name="builder"></param>
/// <param name="parameter"></param>
private static void CopyParameterAttributes(ParameterBuilder builder, ParameterInfo parameter)
{
foreach (var attrib in parameter.GetCustomAttributesData()) //.CustomAttributes)
{
if (attrib.NamedArguments == null || attrib.NamedArguments.Count == 0)
continue;
// The marshaller will prefer to use the MarshalType over MarshalTypeRef.
// and will automatically set MarshalType if you specify MarshalTypeRef.
// this will make it unable to locate the type (since without assembly specification, it will look in the dynamic assembly)
// Therefore we have to remove MarshalType if both MarshalType and MarshalTypeRef is set.
var namedArguments = FixMarshalTypeAttributes(attrib.NamedArguments).ToArray();
var attribBuilder = new CustomAttributeBuilder(
attrib.Constructor,
attrib.ConstructorArguments.Select(a => a.Value).ToArray(),
attrib.NamedArguments.Where(a => a.MemberInfo.MemberType != MemberTypes.Field)
.Select(s => s.MemberInfo)
.OfType<PropertyInfo>()
.ToArray(),
attrib.NamedArguments.Where(a => a.MemberInfo.MemberType != MemberTypes.Field)
.Select(s => s.TypedValue)
.Select(s => s.Value)
.ToArray(),
namedArguments.Where(a => a.MemberInfo.MemberType == MemberTypes.Field).Select(s => s.MemberInfo).OfType<FieldInfo>().ToArray(),
namedArguments.Where(a => a.MemberInfo.MemberType == MemberTypes.Field).Select(s => s.TypedValue).Select(s => s.Value).ToArray());
builder.SetCustomAttribute(attribBuilder);
}
}