プロジェクトの 1 つに次のようなコードがあります。
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
が、それは間違っているようです。同様に、単純に警告を抑制することもできますが、現時点では、同じソース ファイルにある他の 7 つの構造体とそれほど変わらないときに、この特定の構造体が警告をトリガーしている理由を理解したいと考えています。または、他の構造体がこの警告をトリガーしない理由の説明を喜んで受け入れます。