مخطوطات و IronPython جزءا لا يتجزأ من وأنواع تحويل

StackOverflow https://stackoverflow.com/questions/1211415

  •  06-07-2019
  •  | 
  •  

سؤال

ولقد حصلت على تطبيق WPF التي يضمن و IronPython لاستخدام لغة البرمجة. لقد حصلت على نموذج الكائن الذي مخطوطات و IronPython يمكن استخدامها للقيام 'الأشياء'.

ولكن جئت عبر مشكلة غريبة أنني قد تحل بطريقة لا أعتقد هو الصحيح.

في مخطوطتي أريد أن اكتب ما يلي لتعيين موقع كائن في برنامج الأغذية العالمي.

map.CanvasLocation = 10,10

وهذا يأتي مع قول استثناء أنه لا يمكن تحويل من PythonTuple إلى System.Windows.Point.

ولقد حل الوقت الراهن أن استخدام محول نوع مخصص في بلدي ج # كائن، ولكن لست متأكدا إذا كان هذا هو أفضل وسيلة للقيام بذلك.

هل هناك طريقة لمعرفة و IronPython أو صافي بشكل عام كيفية تحويل من نوع واحد إلى آخر ويمكن تمديد وقت التشغيل؟

هل كانت مفيدة؟

المحلول

والطريقة أفعل ذلك هو استخدام 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)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top