gpt4 book ai didi

c# - "NotSupported"属性?

转载 作者:行者123 更新时间:2023-12-05 00:26:03 25 4
gpt4 key购买 nike

有推荐的Attribute在 .Net Framework 中将代码标记为“不支持”?

到目前为止我一直在使用 ObsoleteAttribute但它并不总是完全准确。例如,目前我正在编写一个托管 FMOD 包装器,我想清楚地标记仅适用于不受支持的平台的属性、枚举值等。

假设我有一个类似 enum 的东西来确定音频文件的格式。我想明确指出,至少对于 .Net 端口,某些值是不相关的。例如:

enum SoundFormat{
Wav,
Mp3,
OggVorbis,

[Obsolete("Xbox360 only")] Xma,
[Obsolete("GameCube only")] GcadPcm,
[Obsolete("PS2/PSP only")] Vag,
}

使用时 Obsolete作品和种类的用途相同,它也具有误导性,因为它们在技术上不是 过时 由于不受支持。这是最终影响不大的事情之一,但每次我输入 Obsolete 时它都会困扰我。哪里不准确。

PS:在建议之前, NotImplementedExceptionNotSupportedException真的不回答这个问题,因为它们只提供运行时指导。我对编译时更感兴趣。

最佳答案

我建议你使用 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
}

编译器仍会生成“过时”警告,但会显示特定消息:

Warning 1 'Foo.Bar.NotSupportedAttribute' is obsolete: 'Not supported'

关于c# - "NotSupported"属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22957646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com