Xamarin Android 映射 Java.Lang.Enum 到 C# 枚举
Xamarin Android Mapping Java.Lang.Enum to C# Enum
在 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# 中的 class,它继承了 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 但仍然不太确定如何做到这一点......
首先,您已经在 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 我有枚举
package com.acme.common;
// In java world
public enum FooEnum {
AValue,
AnotherValue
}
这在 Java 的整个代码中使用,例如
// In java world
public class Bar {
void setFoo(FooEnum value) {
// ...
}
}
这被映射到 C# 中的 class,它继承了 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 但仍然不太确定如何做到这一点......
首先,您已经在 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>