Использование динамической типизации С# в Unity 5.3.1f

Я написал код для своей игры, который должен запускать функцию моего кода Python. Я использую Ironpython для своего проекта. Однако, когда я пытаюсь использовать динамическую типизацию С# для вызова функции в приведенном ниже коде, она компилируется, но я получаю следующую ошибку от внутренних компонентов:

" Assets/Scripts/WordSearchAlgorithm.cs(37,29): ошибка CS1502: лучший перегруженный метод соответствует
System.Runtime.CompilerServices.CallSite,object>>.Create(System.Runtime.CompilerServices.CallSiteBinder)' имеет некоторые недопустимые аргументы " "
Assets/Scripts/WordSearchAlgorithm.cs(37,29): ошибка CS1503: Аргумент
'#1' не может преобразовать выражение 'object' в тип
'System.Runtime.CompilerServices. CallSiteBinder' " "
Assets/Scripts/WordSearchAlgorithm.cs(37,61): ошибка CS0234: имя типа
или пространства имен "RuntimeBinder" не существует в пространстве имен
"Microsoft.CSharp". вам не хватает ссылки на сборку?"
Assets/Scripts/WordSearchAlgorithm.cs(37,61): ошибка CS1502: лучший
перегруженный метод, соответствующий 'System.Runtime.CompilerServices.CallSite>.Create(System.Runtime .CompilerServices.CallSiteBinder) имеет недопустимые аргументы.

Я думаю, что моно не поддерживает это. Не могли бы вы дать мне решение, чтобы помочь мне?

static public void StartSearchAlgorithm()
{
    List < string > myList = new List < string > ()
    {
        "fxie",
         "amlo",
         "ewbx",
         "astu"
    };
    var ironPythonRuntime = Python.CreateRuntime();
    try
    {
        //Load the Iron Python file/script into the memory
        //Should be resolve at runtime
        dynamic loadIPython = ironPythonRuntime.UseFile("C:/py.py");
        //Invoke the method and print the result
        loadIPython.BoggleWords(myList, loadIPython.MakeTrie("C:/words.txt")); // here is my problem to calling function from python that unity logError
        //    Debug.Log(string.Format("dd", loadIPython.BoggleWords(myList, loadIPython.MakeTrie("C:/words.txt"))));
    }
    catch (FileNotFoundException ex)
    {}
}

person Amirhossein Etaat    schedule 18.03.2016    source источник


Ответы (1)


Unity использует версию .NET Mono 2.0, аналогичную .NET 3.5. dynamic был представлен в .NET 4.0, поэтому Unity, скорее всего, не скомпилируется.

В настройках проигрывателя есть возможность изменить сабвуфер Mono 2.0 на полный Mono 2.0, но я не знаю, поддерживает ли он dynamic. По крайней мере, вы можете попробовать.

введите здесь описание изображения

person Marnix    schedule 18.03.2016
comment
Я пытаюсь изменить Mono 2.0 sub на Mono 2.0 full в настройках проигрывателя, но ошибка все еще существует. - person Amirhossein Etaat; 18.03.2016
comment
Тогда он не поддерживается в Mono 2.0. Также см. этот ответ: answers.unity3d.com/questions/686244/ - person Marnix; 18.03.2016
comment
Спасибо Marnix за ваш ответ, я видел эту тему раньше, но мне понравился код выше. Я хочу вызвать свою функцию Python, которая без использования динамической типизации C# не работает. Я не знаю, может быть, стоит изменить мою кодировку - person Amirhossein Etaat; 18.03.2016
comment
Можете ли вы найти библиотеку IronPython, которая, возможно, использует .NET 3.5? - person Marnix; 18.03.2016
comment
Я использовал IronPython 2.6 из C# 4.0, но в Unity были ошибки для его библиотек. - person Amirhossein Etaat; 18.03.2016
comment
IronPython 2.7.5, похоже, также имеет dll Net35. Попробуйте сослаться на них в своем проекте и посмотрите, не использует ли он dynamic. - person Marnix; 18.03.2016