.Net Framework中是否有推荐的Attribute
用于将代码标记为“不支持”?
到目前为止,我一直在使用ObsoleteAttribute
,但并不总是完全准确。例如,目前我正在编写一个托管的FMOD包装器,我想清楚地标记仅适用于不支持的平台的属性,枚举值等。
说我有类似枚举的东西来确定音频文件的格式。我想明确指出,对于.Net端口至少,某些值是不相关的。例如:
enum SoundFormat{
Wav,
Mp3,
OggVorbis,
[Obsolete("Xbox360 only")] Xma,
[Obsolete("GameCube only")] GcadPcm,
[Obsolete("PS2/PSP only")] Vag,
}
虽然使用Obsolete
作品具有相同的用途,但它也具有误导性,因为它们在技术上不是 过时 ,因为它们不受支持。这是最终没什么影响的事情之一,但每当我把Obsolete
放在不准确的地方时,它就会让我烦恼。
PS:在建议之前,NotImplementedException
和NotSupportedException
实际上没有回答这个问题,因为它们只提供运行时指导。我对编译时更感兴趣。
答案 0 :(得分:6)
我建议您使用compiler directives创建不同版本的程序集:
enum SoundFormat
{
Wav,
Mp3,
OggVorbis,
#if Xbox360
Xma,
#elif GameCube
GcadPcm,
#elif PS
Vag,
#endif
}
如果您只在定义了Xbox360的情况下编译程序集,那么枚举将如下所示:
enum SoundFormat
{
Wav,
Mp3,
OggVorbis,
Xma,
}
更新:从您的原始问题中不清楚您要实现的目标。但是如果你想要所有这些枚举成员存在,并且如果使用特定于平台的格式就有编译器警告,那么你可以使用Pablo Fernandez建议的方法:
[Obsolete("Not supported")]
public class NotSupportedAttribute : Attribute
{
}
然后使用NotSupported
属性(比Obsolete
更好地描述意图)来装饰特定于平台的格式:
enum SoundFormat
{
Wav,
Mp3,
OggVorbis,
[NotSupported]
Xma,
[NotSupported]
GcadPcm,
[NotSupported]
Vag
}
编译器仍会生成“过时”警告,但具有特定消息:
警告1'Foo.Bar.NotSupportedAttribute'已过时:'不支持'
答案 1 :(得分:0)
看起来答案是:不,没有比标记为[已废弃]更好的了。