EDIT 2
così sto controllando con il team CF, ma ora credo di aver trovato un bug. Questo dimostra ancora meglio:
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());
}
}
Nell'ambito del quadro completo torno questo:
Attributes: 1
Attributes: 1
Attributes: 1
Sotto CF 3.5 ottengo questo:
Attributes: 0
Attributes: 1
Attributes: 1
Così si può vedere che è pienamente in grado di restituire un attributo, personalizzato o all'interno del BCL, non solo MarshalAsAttribute.
EDIT 3 Va bene, ha fatto un po 'più di scavo, e si scopre che il comportamento CF è in realtà correct if you go by the spec. Va contro ogni logica, ma è giusto.
Ho a che fare con FieldInfo per il mio esempio precedente. Posso provare a vedere se PropertyInfo funzionerebbe, ma mi chiedo perché il mio esempio non funzioni. – SwDevMan81
boo per bug: P Sai se c'è un problema? – SwDevMan81
Immagino che il lavoro attorno potrebbe essere semplicemente creare il mio attributo personalizzato (reinventare la ruota solo credo)? Dal momento che sembra che funziona ok. – SwDevMan81