【问题标题】:Xamarin Android Mapping Java.Lang.Enum to C# EnumXamarin Android 将 Java.Lang.Enum 映射到 C# Enum
【发布时间】:2016-04-29 00:44:26
【问题描述】:

在java中我有枚举

package com.acme.common;

// In java world
public enum FooEnum {
    AValue,
    AnotherValue
}

这在 Java 的整个代码中都会用到,例如

// In java world
public class Bar {
    void setFoo(FooEnum value) { 
       // ...  
    }
}

这被映射到 C# 中继承 Java.Lang.Enum 的类,如下所示:

// Now in C# generated bindings 
// I want this to be a CLR Enum instead
public sealed partial class FooEnum : global::Java.Lang.Enum 
{ 
   // ... 
}   
// C# generated class uses Java.Lang.Enum type for getter and setter
// But I want FooEnum to be clr enum
public partial class Bar 
{        
   public FooEnum Foo { get; set; }
} 

我想将其映射到 C# 枚举,而不是使用 EnumFields.xml,,但不知道如何。

我用谷歌搜索了 Xamarin Android EnumFields 并找到了一些结果,并阅读了 Xamarin Android Binding walthrough 但仍然不知道该怎么做......

【问题讨论】:

    标签: xamarin xamarin.android


    【解决方案1】:

    首先,您已经在 EnumFields.xml 中定义了您的枚举,它们在 C# 中的显示方式

    <mapping jni-class="com/acme/common/FooEnum " clr-enum-type="Com.Acme.Common.FooEnum">
        <field jni-name="AValue" clr-name="AValue" value="0" />
        <field jni-name="AnotherValue" clr-name="AnotherValue" value="1" />
    </mapping>
    

    然后你需要为所有使用这个枚举的方法编辑 EnumMethods.xml

    <mapping jni-class="com/skobbler/ngx/map/realreach/SKRealReachSettings">
        <method jni-name="getFoo" parameter="return" clr-enum-type="Com.Acme.Common.FooEnum" />
        <method jni-name="setFoo" parameter="measurementUnit" clr-enum-type="Com.Acme.Common.FooEnum" />
    </mapping>
    

    【讨论】:

    • 天哪,我认为它有效!我正要重写所有的 java 代码以使用 int 而不是 Enum。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多