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であることが判明しました。それはすべての論理に反するが、それは正しい。
上記の例のFieldInfoを扱っています。私はPropertyInfoがうまくいくかどうか試してみることができますが、なぜ私の例がうまくいかないのか不思議です。 – SwDevMan81
バグのためのブーイング:P回避策があるかどうか知っていますか? – SwDevMan81
私は、自分のカスタム属性を作成することができます(ちょっと考えてみてください)。それのように見えるので、大丈夫です。 – SwDevMan81