CustomAttribute Struct
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Provides information about a custom attribute.
public value class CustomAttribute
public struct CustomAttribute
public readonly struct CustomAttribute
type CustomAttribute = struct
Public Structure CustomAttribute
- Inheritance
Examples
This example shows how to print all custom attributes applied to the type definition:
class MyAttribute : Attribute
{
public int X { get; set; }
}
[My(X = 1)]
class ExampleType1 { }
[My(X = 2)]
class ExampleType2 { }
static void PrintCustomAttributes(MetadataReader mr, TypeDefinition t)
{
// Enumerate custom attributes on the type definition
foreach (CustomAttributeHandle attrHandle in t.GetCustomAttributes())
{
CustomAttribute attr = mr.GetCustomAttribute(attrHandle);
// Display the attribute type full name
if (attr.Constructor.Kind == HandleKind.MethodDefinition)
{
MethodDefinition mdef = mr.GetMethodDefinition((MethodDefinitionHandle)attr.Constructor);
TypeDefinition tdef = mr.GetTypeDefinition(mdef.GetDeclaringType());
Console.WriteLine($"Type: {mr.GetString(tdef.Namespace)}.{mr.GetString(tdef.Name)}");
}
else if (attr.Constructor.Kind == HandleKind.MemberReference)
{
MemberReference mref = mr.GetMemberReference((MemberReferenceHandle)attr.Constructor);
if (mref.Parent.Kind == HandleKind.TypeReference)
{
TypeReference tref = mr.GetTypeReference((TypeReferenceHandle)mref.Parent);
Console.WriteLine($"Type: {mr.GetString(tref.Namespace)}.{mr.GetString(tref.Name)}");
}
else if (mref.Parent.Kind == HandleKind.TypeDefinition)
{
TypeDefinition tdef = mr.GetTypeDefinition((TypeDefinitionHandle)mref.Parent);
Console.WriteLine($"Type: {mr.GetString(tdef.Namespace)}.{mr.GetString(tdef.Name)}");
}
}
// Display the attribute value
byte[] data = mr.GetBlobBytes(attr.Value);
Console.Write("Value: ");
for (int i = 0; i < data.Length; i++) Console.Write($"{data[i]:X2} ");
Console.WriteLine();
}
}
static void PrintTypesCustomAttributes(MetadataReader mr)
{
foreach (TypeDefinitionHandle tdh in mr.TypeDefinitions)
{
TypeDefinition t = mr.GetTypeDefinition(tdh);
Console.WriteLine($"{mr.GetString(t.Namespace)}.{mr.GetString(t.Name)}");
PrintCustomAttributes(mr, t);
}
}
Remarks
A custom attribute is an annotation that associates additional information with a metadata element, such as an assembly, type, or method. You can use the GetCustomAttribute(CustomAttributeHandle) method to get a custom attribute instance. For more information about attributes in .NET, see Extend metadata using attributes.
Properties
Constructor |
Gets the constructor (the MethodDefinitionHandle or MemberReferenceHandle) of the custom attribute type. |
Parent |
Gets the handle of the metadata entity the attribute is applied to. |
Value |
Gets the value of the attribute. |
Methods
DecodeValue<TType>(ICustomAttributeTypeProvider<TType>) |
Decodes the arguments encoded in the value blob. |