Python.NET을 사용하여 Python에서 C# 코드를 호출하는 C# 어셈블리를로드합니다.Python.NET에서 C# Nullable Int32를 작성하여 선택적 int 인수로 C# 메서드 호출
Our.Namespace.Proj.MyRepo 내 방법 :
OutputObject GetData(string user, int anID, int? anOptionalID= null)
가 나는 경우 경우에 대한 메서드를 호출 할 수 있습니다이 그러나 나는이처럼 보이는 메소드를 호출 문제가 오전, 꽤 깔끔하게 작동 옵션의 3 번째의 인수는 존재 합니다만, 3 번째의 인수가 null의 경우와 일치하도록 (듯이) 무엇을 건네 줄 수 없는지를 나타낼 수 없습니다.
import clr
clr.AddReference("Our.Namespace.Proj")
import System
from Our.Namespace.Proj import MyRepo
_repo = MyRepo()
_repo.GetData('me', System.Int32(1), System.Int32(2)) # works!
_repo.GetData('me', System.Int32(1)) # fails! TypeError: No method matches given arguments
_repo.GetData('me', System.Int32(1), None) # fails! TypeError: No method matches given arguments
iPython 노트북은 마지막 인수는 형식이어야한다는 것을 나타냅니다 :
System.Nullable`1[System.Int32]
귀무 경우를 일치 객체를 생성하는 방법을 그냥 확실하지 않다.
C# 인식 Null 개체를 만드는 방법에 대한 제안 사항이 있으십니까? 네이티브 Python None을 전달한다고 가정했지만, 그렇지 않습니다. 당신이 선택적 매개 변수가 Nullable
이라고 말을하는지 때문에
에 인수를 전달해야하지만, 당신이 그것에 없음을 통과하지 않는 경우는, 같다, 아마 만 m를 검색 참조 유형 매개 변수가있는 소수 민족. 마지막 매개 변수없이 오버로드를 시도 할 수 있습니다. 마지막 매개 변수가'object' 인 다른 오버로드로 인해 None (이 경우 작동합니다)을 전달할 수 있습니다. 마지막 인수가 'as int?'인 첫 번째 메서드를 호출합니다. – IllidanS4
오버로드 된 메서드 (세 번째 매개 변수없이 하나 및 하나)를 사용하도록 C# 쪽을 리팩토링하는 작업을 마쳤습니다. Python.NET이이 문제를 처리합니다. 단점은 마지막 매개 변수의 존재를 기반으로 두 가지 방법 중 하나를 조건부로 호출해야한다는 것입니다.마지막 매개 변수가 C# 측에서 세 번째로 오버로딩 된 경우에 대해 'object'가 될 것이라는 제안을 시도하여 None 전달을 허용합니다. 감사! – skulz00