是否有与/ unsafe标志对应的“预处理器”符号?

时间:2009-02-27 23:30:15

标签: c# wpf c-preprocessor unsafe

我在C#中处理WriteableBitmap。我目前正在使用不安全的代码块通过WriteableBitmap.BackBuffer直接访问像素。不过,我宁愿不依赖于/unsafe选项,所以我正在考虑使用WriteableBitmap.WritePixels代替。

是否有某种方式在“不安全”版本中有条件地编译,以便在使用/ unsafe编译选项时可以使用它,而无需手动集成到我的项目文件中?

简而言之,我正在寻找以下内容:

#if UNSAFE
   //my unsafe version
#else
   //the supposedly safe version goes here
#endif

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

基本上,我想保留快速版本的重要性,但有一个合理的版本,无论如何都能正常工作。

3 个答案:

答案 0 :(得分:4)

我建议您使用配置管理器创建一个或多个新配置,例如“Unsafe Debug”和“Unsafe Release”,它们具有现有选项并检查Unsafe并添加UNSAFE的条件符号。您可以使用“不安全”配置,而不是切换“不安全”选项。

您还可以让配置更改不安全程序集的输出名称,这样您就可以使用两个程序集,比如Bitmaps.dll和Bitmaps.Unsafe.dll,程序集的客户端可以通过指定最佳方式来确定最适合它的需求它引用的程序集。

答案 1 :(得分:1)

我建议您使用/unsafe /define:SAFE进行编译。也许还有另一种我不知道的方式。

答案 2 :(得分:0)

我想你可以试试这段代码

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

然后您可以使用您在示例中提供的代码。