c#为.net enum添加额外的值
本文关键字:添加 net enum | 更新日期: 2023-09-27 18:18:07
今天,当我试图将一些现有的代码从。net移植到Xamarin (Mono for Android)时,我遇到的问题是[methodimpll (MethodImplOptions.侵略性内联)]没有为Android编译,因为MethodImplOptions在为Android编译时没有侵略性内联值。
我想知道是否有可能得到这个代码编译而不必改变所有的代码行?
我已经尝试创建一个具有相同名称的属性,但也遇到了编译错误,因为2个枚举具有相同的名称(歧义)。
我想要的是某种方式注入的侵略性内联值在现有的Enum,只是给它一个值0或类似的东西,所以什么都没有发生。
我希望有人能帮我解决这个问题。亲切的问候,
Devedse
你不能给枚举添加值;类型已经编译到库中。(您可以通过将基础类型值转换为enum值来将它们设置为其他值,但我认为这不适用于您的属性情况)
因为你有很多地方使用它,你必须用指令更新,我建议将所需的MethodImplOption
值移动到一个集中可访问的常量,并有所有引用:
public class MethodImplSetting
{
public const MethodImplOptions DEFAULT_METHOD_IMPL = MethodImplOptions.AggressiveInlining;
}
[MethodImpl(DEFAULT_METHOD_IMPL)]
public void MyMethod()
{
}
然后你可以应用编译器指令,在编译时毫不费力地将其切换为你的特殊Android值:
public class MethodImplSetting
{
public const MethodImplOptions DEFAULT_METHOD_IMPL =
#if __ANDROID__
MethodImplOptions.NoInlining; //or whatever value you want
#else
MethodImplOptions.AggressiveInlining;
#endif
}
当您支持额外的平台或者想要切换不同的方法实现选项进行测试时,现在这样做就变得微不足道了。
我相信合适的Xamarin Android指令是__ANDROID__
,来自他们的文档在平台分歧/抽象/分歧实现,章节3.1.2,但你可能需要仔细检查。