Устранение неоднозначности перегруженного метода с несколькими параметрами в Python. NET - PullRequest
0 голосов
/ 03 апреля 2020

Среда

  • Pytho nnet версия: 2.3.0 и 2.4.0
  • Python версия: 3.6.5
  • Операционная система: W10

Подробности

  • У меня проблемы с устранением неоднозначности перегруженного метода C#, который имеет несколько параметров. Я обнаружил # 935 , что очень похоже на проблему в проекте GitHub, но не может заставить его работать. Я выполняю те же действия, но все равно получаю ту же ошибку.

Сторона C#

    public enum MyEnum: byte
    {
        Success= (byte)'S',
        Error = (byte)'E'
    }

    public class MyClass
    {
        public Dictionary<Enum, BlockingCollection<ISomeInterface>> MyDictionary { get; }

        public MyClass()
        {
            MyDictionary = new Dictionary<Enum, BlockingCollection<ISomeInterface>>(); 
        }
    }

Со стороны python я начал с этого кода

    from System.Collections.Concurrent import BlockingCollection
    from MyModule import MyClass, ISomeInterface, MyEnum

    obj = MyClass()
    collection = BlockingCollection[ISomeInterface]()
    obj.MyDictionary.Add(MyEnum.Success, collection)

Это не с TypeError: No method matches given arguments for Add. Я пробовал то, что, казалось, решило это для # 935, но получило те же результаты

    from System.Collections.Concurrent import BlockingCollection
    from System import Enum
    from MyModule import MyClass, ISomeInterface, MyEnum

    obj = MyClass()
    collection = BlockingCollection[ISomeInterface]()
    obj.MyDictionary.Add[Enum, BlockingCollection[ISomeInterface]](MyEnum.Success, collection)

Это не удалось с TypeError: No match found for given type params

  • Вывод print(obj.MyDictionary.Add.__overloads__) равен
    Void Add(System.Enum, System.Collections.Concurrent.BlockingCollection`1[MyModule.ISomeInterface])

ОБНОВЛЕНИЕ

Запуск только этого кода на самом деле работает, add показывает как связанный метод в отладчике:

add = obj.MyDictionary.Add[Enum, BlockingCollection[ISomeInterface]]

Однако попытка вызова функция всегда терпит неудачу. Я попытался передать System.byte и 0 вместо перечисления, но ни один из них не сработал.

add(MyEnum.Success, collection)
obj.MyDictionary.Add[Enum, BlockingCollection[ISomeInterface]](MyEnum.Success, collection)
obj.MyDictionary.Add.Overloads[Enum, BlockingCollection[ISomeInterface]](MyEnum.Success, collect
...