我的一个项目中有类似于以下的代码:
internal enum ArtworkType
{
    Undefined = 0,
    Bmp = 1,
    Gif = 2,
    Jpeg = 3,
    Png = 4
}
[StructLayout(LayoutKind.Sequential)]
internal struct TagArtwork
{
    internal IntPtr data;
    internal int size;
    internal ArtworkType type;
}
当我在这段代码上运行 FxCop 时,我遇到了警告CA1049。该结构用于与本机代码库的互操作性,因此它几乎必须具有这种布局。为什么 FxCop 让我对这个结构感到悲伤?我在同一个源文件中有其他结构,它们也有IntPtr成员,但 FxCop 并没有抱怨这些。
例如,以下代码不会触发相同的警告:
internal enum ItemType
{
    Implicit = 0,
    Utf8 = 1,
    Utf16 = 2,
    Sjis = 3,
    Html = 6,
    Xml = 7,
    Uuid = 8,
    Isrc = 9,
    Mi3p = 10,
    Gif = 12,
    Jpeg = 13,
    Png = 14,
    Url = 15,
    Duration = 16,
    DateTime = 17,
    Genres = 18,
    Integer = 21,
    Riaa_pa = 24,
    Upc = 25,
    Bmp = 27,
    Undefined = 255
}
[StructLayout(LayoutKind.Sequential)]
internal struct MP4ItmfData
{
    internal byte typeSetIdentifier;
    internal ItemType typeCode;
    internal int locale;
    internal IntPtr value;
    internal int valueSize;
}
我想我可以IDisposable在结构上实现,但这似乎是错误的。同样,我可以简单地抑制警告,但目前,我想了解触发警告的这个特定结构是什么,当它与我在同一源文件中的其他七个结构没有太大不同时。或者,我很乐意接受解释为什么其他结构不会触发此警告。