16

2.0フレームワークを使用して次のコードを試してみましたが、属性を取得しましたが、これをコンパクトなフレームワークで試しても空の配列が返されます。 MSDNドキュメントでは、サポートされていると私は何か間違っていると言いますか?GetCustomAttributesはどのようにして取得できますか?

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

答えて

16

EDIT 2

だから私は今、CFチームに確認していますが、私はあなたがバグを見つけたと信じています。これは、より良い、それを示しています。完全なフレームワークの下で

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

私は戻って、この取得:CF 3.5の下で

Attributes: 1 
Attributes: 1 
Attributes: 1 

を、私はこれを取得:

Attributes: 0 
Attributes: 1 
Attributes: 1 

ですから、それは完全に可能だ見ることができますカスタムまたはBCL内で、MarshalAsAttributeではなく属性を返すこと。よし


EDIT 3 、私はもう少し掘りをしました、そして、それはCFの動作が実際にcorrect if you go by the specであることが判明しました。それはすべての論理に反するが、それは正しい。

+0

上記の例のFieldInfoを扱っています。私はPropertyInfoがうまくいくかどうか試してみることができますが、なぜ私の例がうまくいかないのか不思議です。 – SwDevMan81

+0

バグのためのブーイング:P回避策があるかどうか知っていますか? – SwDevMan81

+0

私は、自分のカスタム属性を作成することができます(ちょっと考えてみてください)。それのように見えるので、大丈夫です。 – SwDevMan81