“NotSupported”属性?

时间:2014-04-09 09:02:42

标签: c# .net attributes

.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:在建议之前,NotImplementedExceptionNotSupportedException实际上没有回答这个问题,因为它们只提供运行时指导。我对编译时更感兴趣。

2 个答案:

答案 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)

看起来答案是:不,没有比标记为[已废弃]更好的了。