gpt4 book ai didi

Xamarin Android 将 Java.Lang.Enum 映射到 C# Enum

转载 作者:行者123 更新时间:2023-12-05 00:56:03 26 4
gpt4 key购买 nike

在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但仍然不确定如何做到这一点......

最佳答案

首先,您在 EnumFields.xml 中定义了您的 Enum,它们将如何出现在 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>

然后您需要为使用此 Enum 的所有方法编辑 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>

关于Xamarin Android 将 Java.Lang.Enum 映射到 C# Enum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36919688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com