Мое приложение использует IronPython для запуска скриптов пользователями. Один такой скрипт используется для установки элементов структуры. Моя структура выглядит следующим образом:
[StructLayout(LayoutKind.Sequential)]
public struct Data
{
int a;
int b;
}
Я объявил публичный объект уровня класса для этой структуры, например:
public Data data = new data();
Я устанавливаю объект data
в качестве переменной области для IronPython:
scope.SetVariable("data", data);
В скрипте python я устанавливаю переменные a
и b
:
data.a = 5
data.b = 10
Но переменные не изменяются в коде С#. Я заметил, что если я использую нормальное целое или любой другой тип, эти переменные устанавливаются.
Есть ли проблема с использованием структур? Как я могу установить элементы структуры С# из IronPython?
Используйте объект открытой области видимости для предоставления вспомогательных методов скриптам.
Когда я не могу сделать это в IronPython, это то, что я делаю. IronPython дает мне гибкость полного языка с ifs, fors и whiles, но иногда ответы на интеграцию с миром С# нечеткие, поэтому я просто создаю вспомогательный метод.
Вы даже можете вводить параметры, потому что маршаллинг хорошо работает во всех вызовах функций. void SetResult (int a, int b);
Небольшие комментарии, вероятно, правы, вы, вероятно, устанавливаете структуру, но структура не является передачей по ссылке, это пропуск по значению.
Вы должны понимать эту концепцию. Вот хорошая статья о нем...
В чем разница между передачей по ссылке или передачей по значению?
Вы можете использовать эту концепцию самостоятельно.
data
и обновить их в C #. Кажется, вы действительно просто хотитеclass
вместоstruct
.