有对应于 /unsafe 标志的“预处理器”符号吗?

9
我正在处理C#中的WriteableBitmap。我目前使用不安全的代码块通过WriteableBitmap.BackBuffer直接访问像素。然而,我不想依赖于/unsafe选项,因此我考虑改用WriteableBitmap.WritePixels。
是否有一种条件编译“unsafe”版本的方法,使其可以在编译时使用/unsafe选项时使用,而不需要手动集成到我的项目文件中?
简而言之,我正在寻找以下内容:
#if UNSAFE
   //my unsafe version
#else
   //the supposedly safe version goes here
#endif

运行时检测也很好;但这意味着我总是需要使用/unsafe编译,并且这意味着库代码需要进行项目文件更新,这不太方便。

基本上,我想保留快速版本以便在重要时使用,但也希望有一个合理的版本,无论什么情况都可以正常工作。

3个回答

6
我建议您使用配置管理器创建一个或多个新配置,例如“不安全调试”和“不安全发布”,这些配置具有现有选项加上检查不安全和添加条件符号UNSAFE。您将使用不安全配置而不是切换不安全选项。
您还可以使配置更改不安全程序集的输出名称,因此您将拥有两个程序集,例如Bitmaps.dll和Bitmaps.Unsafe.dll,程序集的客户端可以通过指定引用哪个程序集来决定其最好的需求。

这个(就像配置器的建议一样)看起来确实很可行,谢谢! - Eamon Nerbonne

1
我建议你使用/unsafe /define:SAFE进行编译。也许有其他我不知道的方式。

0

我认为你可以尝试这段代码

#define UNSAFE
#undef UNSAFE // comment this line out if you want to compile the save version

然后你可以像你在例子中给出的那样使用代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接