Как выполнить побитовое ИЛИ для перечислений.NET в сценарии, работающем с NLua?

У меня есть следующий код отражения в C#, который я пытаюсь воспроизвести с помощью сценария NLua: G.Object.GetType().GetField("count", BindingFlags.Instance | BindingFlags.NonPublic);

Все хорошо, пока я не попытаюсь использовать побитовое ИЛИ операцию с двумя флагами. Я алерады попробовал:
BindingFlags.Instance + BindingFlags.NonPublic (арифметическая операция над нечисловым числом) BindingFlags.Instance | BindingFLags.NonPublic (очевидно, не работает, но стоит попробовать)

Я также попробовал чистые реализации Lua библиотек битовой манипуляции. Все терпят неудачу, потому что то, что я пытаюсь ИЛИ, называется типом userdata в NLua.

Преобразование типа 'userdata' с помощью tonumber() также завершается неудачно.

Мой текущий код Lua ниже:
obj = G.Object:GetType() field = obj:GetField("count", *...two OR'd flags here...*)

1 ответ

Решение

Лучший способ объединить флаги Enum с NLua - использовать вспомогательную функцию luanet.enum

value = luanet.enum (BindingFlags, 'NonPublic,Instance')

Пример: https://github.com/codefoco/NLuaBox/blob/00af36aa480281ae33835173430a806c54c2f9dc/Resources/source/OutputViewController.lua#L41

Другие вопросы по тегам