How do I GetCustomAttributes?

I have tried the following code using the 2.0 framework and I get an attribute back, but when I try this on the compact framework, it always returns an empty array. The MSDN documenation says its supported, am I doing something wrong?

 Test x = new Test(); FieldInfo field_info = x.GetType().GetField("ArrayShorts"); object[] custom_attributes = field_info.GetCustomAttributes(typeof(MarshalAsAttribute), false); [StructLayout(LayoutKind.Sequential)] public struct Test { [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public ushort[] ArrayShorts; } 

1 Answer

EDIT 2

So I'm checking with the CF team now but I believe you've found a bug. This shows it even better:

public class MyAttribute : Attribute { public MyAttribute(UnmanagedType foo) { } public int Bar { get; set; } } [StructLayout(LayoutKind.Sequential)] public struct Test { [CLSCompliant(false)] [MyAttribute(UnmanagedType.ByValArray, Bar = 4)] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public ushort[] ArrayShorts; } class Program { static void Main(string[] args) { FieldInfo field_info = typeof(Test).GetField("ArrayShorts"); object[] custom_attributes = field_info.GetCustomAttributes(typeof(MarshalAsAttribute), false); Debug.WriteLine("Attributes: " + custom_attributes.Length.ToString()); custom_attributes = field_info.GetCustomAttributes(typeof(MyAttribute), false); Debug.WriteLine("Attributes: " + custom_attributes.Length.ToString()); custom_attributes = field_info.GetCustomAttributes(typeof(CLSCompliantAttribute), false); Debug.WriteLine("Attributes: " + custom_attributes.Length.ToString()); } } 

Under the full framework I get back this:

Attributes: 1 Attributes: 1 Attributes: 1 

Under CF 3.5 I get this:

Attributes: 0 Attributes: 1 Attributes: 1 

So you can see it's fully capable of returning an attribute, either custom or within the BCL, just not the MarshalAsAttribute.


EDIT 3 Alright, I did a little more digging, and it turns out that the CF behavior is actually correct if you go by the spec. It goes against all logic, but it's right.

3

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

You Might Also Like