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());
}
}
Под полной базы я вернусь в следующем:
Attributes: 1
Attributes: 1
Attributes: 1
Под CF 3.5 я получаю это:
Attributes: 0
Attributes: 1
Attributes: 1
Таким образом, вы можете увидеть его полностью дееспособным возврата атрибута, как пользовательского, так и внутри BCL, а не атрибута MarshalAsAttribute.
EDIT 3 Хорошо, я сделал немного больше рыть, и оказывается, что поведение CF фактически correct if you go by the spec. Это противоречит всей логике, но это правильно.
Я имею дело с FieldInfo для моего приведенного выше примера. Я могу попробовать и посмотреть, будет ли PropertyInfo работать, но мне интересно, почему мой пример не работает. – SwDevMan81
boo для ошибок: P Знаете ли вы, есть ли работа вокруг? – SwDevMan81
Я предполагаю, что работа вокруг может быть только для создания моего собственного атрибута (просто изобретать колесо, я думаю)? Поскольку выглядит так, все работает нормально. – SwDevMan81