metodos declaración atributos c# compact-framework attributes marshalling getcustomattributes

metodos - declaración de atributos en c#



¿Cómo puedo obtener atributos personalizados? (1)

He intentado el siguiente código usando el marco 2.0 y me devuelven un atributo, pero cuando lo intento en el marco compacto, siempre devuelve una matriz vacía. La documentación de MSDN dice que es compatible, ¿estoy haciendo algo mal?

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; }


Editar 2

Así que estoy consultando con el equipo de FQ ahora, pero creo que has encontrado un error. Esto lo muestra aún mejor:

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()); } }

Bajo el marco completo recupero esto:

Attributes: 1 Attributes: 1 Attributes: 1

Bajo CF 3.5 entiendo esto:

Attributes: 0 Attributes: 1 Attributes: 1

Así que puedes ver que es totalmente capaz de devolver un atributo, ya sea personalizado o dentro del BCL, pero no el atributo MarshalAsAttribute.

EDITAR 3 Muy bien, hice un poco más de investigación, y resulta que el comportamiento de la FQ es realmente correcto si sigues la especificación . Va contra toda lógica, pero está bien.