我的一个项目中有类似于以下的代码:
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
在结构上实现,但这似乎是错误的。同样,我可以简单地抑制警告,但目前,我想了解触发警告的这个特定结构是什么,当它与我在同一源文件中的其他七个结构没有太大不同时。或者,我很乐意接受解释为什么其他结构不会触发此警告。