मैं समझने की कोशिश कर रहा हूं कि निम्न कोड अपेक्षित के रूप में क्यों काम नहीं कर रहा है; TypeDescriptor
बस गुणों से कस्टम कनवर्टर नहीं उठा रहा है। मैं केवल यह मान सकता हूं कि मैंने एक स्पष्ट गलती की है लेकिन मैं इसे नहीं देख सकता।यह टाइप कनवर्टर क्यों काम नहीं कर रहा है?
- संपादन - इस कोड को जब मैं अपने आप ही एक कंसोल में इसे चलाने, मैं वास्तव में एक और अधिक जटिल आवेदन के भीतर से और एक अलग नाम स्थान से एक कनवर्टर फोन कर रहा हूँ काम करने के लिए लगता है।
- संपादन - मैं कैसे TypeDescriptor डिबग तो मैं देख सकते हैं कि क्या हो रहा है और उसके बाद मैं शायद यह अपने आप जवाब कर सकते हैं कर सकते हैं पर वैकल्पिक रूप से किसी भी सुझाव।
- संपादित करें - यह समस्या लगभग निश्चित रूप से विभिन्न असेंबली में होने वाले टुकड़ों से संबंधित है।
- संपादन - ऐसा लगता है कि इस गतिशील रूप से लोड हो रहा है विधानसभाओं के कुछ मोड़ की वजह से काम नहीं कर रहा है - इस कोड वास्तुकला की तरह एक प्लगइन के तहत चल रहा है।
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.ComponentModel;
namespace MyTest
{
public class TestTester
{
public static void Main(string[] args)
{
object v = TypeDescriptor.GetConverter(typeof(MyTest.Test)).ConvertFromInvariantString("Test");
}
}
public class TestConverter : TypeConverter
{
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return false;
}
public override bool CanConvertFrom(ITypeDescriptorContext context, System.Type sourceType)
{
if (sourceType == typeof(string) || base.CanConvertFrom(context, sourceType))
{
return true;
}
return base.CanConvertFrom(context, sourceType);
}
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
{
if (destinationType == typeof(Test) || base.CanConvertTo(destinationType))
{
return true;
}
return base.CanConvertTo(context, destinationType);
}
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
{
if (value.GetType() == typeof(string))
{
Test t = new Test();
t.TestMember = value as string;
return t;
}
return base.ConvertFrom(context, culture, value);
}
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
{
if (destinationType == typeof(string) && value.GetType() == typeof(Test))
{
return ((Test)value).TestMember;
}
return base.ConvertTo(context, culture, value, destinationType);
}
}
[TypeConverterAttribute(typeof(TestConverter))]
public struct Test
{
public string TestMember { get; set; }
}
}
मुझे लगता है कि यह अलग-अलग असेंबली में होने की संभावना है - मैंने बस बिट्स को चारों ओर ले जाने की कोशिश की थी; जब मेरे पास एक संपत्ति असेंबली में किसी अन्य असेंबली में आइटम का जिक्र किया गया था तो यह संपत्ति को प्रदर्शित करने के लिए अपने टाइपकॉन्टर एट अल का उपयोग नहीं कर सका। अगर इस पर कोई समाधान नहीं था तो मुझे आश्चर्य होगा। – cyborg