Как сохранить тип Generics в выводе кода C# из Haxe? - PullRequest
1 голос
/ 05 апреля 2020

Я хотел бы использовать массив с типом в C#.

Я пытался создать следующий код в Haxe 4.0.5, но hoges это Array<object> в C#. (Я хотел Array<Hoge>)

class ArrayTest
{
    public var hoges: Array<Hoge>;
}

class Hoge
{
    public var x: Int;
    public var y: Int;
    public var z: Int;
}

Я нашел следующий пост на GitHub и понял, что это поведение является специальным c, чтобы сделать код быстрее. https://github.com/HaxeFoundation/haxe/issues/5434#issuecomment -230581990 .

Однако я надеюсь, что он поставляется с типом, потому что я хочу использовать этот код в качестве интерфейса. Есть ли обходные пути?

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Вы можете использовать NativeArray

typedef Hoges = cs.NativeArray<Hoge>;
class ArrayTest { public var hoges: Hoges; }

, генерирующий

public global::Hoge[] hoges;
1 голос
/ 05 апреля 2020

Если это в первую очередь для целей взаимодействия с внешним кодом, использование коллекции C# -specifi c может быть более подходящим:

import cs.system.collections.generic.List_1;

class Main {
    public static var hoges:List_1<Hoge> = new List_1();
    static function main() {
        hoges.Add(new Hoge());
        trace(hoges[0]);
    }
}
class Hoge {
    public var x: Int;
    public var y: Int;
    public var z: Int;
    public function new() {}
}

, которая производит

public static global::System.Collections.Generic.List<global::Hoge> hoges;

как и следовало ожидать.

Тезисы могут использоваться для переключения реализаций в зависимости от целевой платформы.

...