내장된 IronPython 스크립트 및 유형 변환
-
06-07-2019 - |
문제
스크립팅 언어로 사용할 IronPython을 포함하는 WPF 응용 프로그램이 있습니다.IronPython 스크립트가 '일'을 수행하는 데 사용할 수 있는 개체 모델이 있습니다.
그러나 나는 옳다고 생각하지 않는 방식으로 해결한 이상한 문제를 발견했습니다.
내 스크립트에서는 WPF에서 개체의 위치를 설정하기 위해 다음을 입력하고 싶습니다.
map.CanvasLocation = 10,10
PythonTuple에서 System.Windows.Point로 변환할 수 없다는 예외가 발생합니다.
현재 내 C# 개체에서 사용자 지정 유형 변환기를 사용하여 이 문제를 해결했지만 이것이 최선의 방법인지는 확실하지 않습니다.
IronPython 또는 .Net에 일반적으로 한 유형에서 런타임에 확장할 수 있는 다른 유형으로 변환하는 방법을 알려주는 방법이 있습니까?
해결책
내가 수행하는 방법은 TypeDescriptor를 사용하여 런타임 시 PythonTuple에 유형 변환기 속성을 추가하는 것입니다.
TypeDescriptor.AddAttributes(typeof(PythonTuple),
new TypeConverterAttribute(typeof(Converter)));
그런 다음 다음 코드를 사용하여 속성 설정기(SetMemberAfter 메서드)에서 변환기를 찾습니다.
var converter = TypeDescriptor.GetConverter(value);
if (converter.CanConvertTo(destinationType))
{
var destinationValue = converter.ConvertTo(value, destinationType);
return destinationValue;
}
else
{
throw new InvalidOperationException("Cannot convert from {0} to {1}".UIFormat(
value == null ? "null" : value.GetType().Name, destinationType.Name));
}
다른 팁
왜 안 해?
map.CanvasLocation = Point(10,10)
제휴하지 않습니다 StackOverflow