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

c#为.net enum添加额外的值

你不能给枚举添加值;类型已经编译到库中。(您可以通过将基础类型值转换为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,但你可能需要仔细检查。