EDIT 2
Więc jestem sprawdzanie z zespołem CF teraz, ale wierzę, że znalazłeś błąd. To pokazuje, to nawet lepiej:
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());
}
}
pod pełnym ramach wrócę to:
Attributes: 1
Attributes: 1
Attributes: 1
Pod CF 3.5 otrzymuję to:
Attributes: 0
Attributes: 1
Attributes: 1
Więc można go zobaczyć w pełni zdolny zwracania atrybutu, niestandardowego lub w ramach BCL, po prostu nie MarshalAsAttribute.
EDIT 3 Dobra, zrobiłem trochę więcej kopanie, i okazuje się, że zachowanie CF jest rzeczywiście correct if you go by the spec. Jest to sprzeczne z wszelką logiką, ale ma rację.
Mam do czynienia z FieldInfo dla mojego powyższego przykładu. Mogę spróbować sprawdzić, czy działa PropertyInfo, ale zastanawiam się, dlaczego mój przykład nie działa. – SwDevMan81
boo za błędy: P Czy wiesz, czy jest jakieś obejście? – SwDevMan81
Sądzę, że praca wokół może być po prostu stworzeniem mojego własnego atrybutu niestandardowego (po prostu wymyślić na nowo koło). Ponieważ wygląda tak, działa dobrze. – SwDevMan81