c# – 为什么TypeConverter不工作?

c# – 为什么TypeConverter不工作?,第1张

概述我想了解为什么下面的代码不能像预期的那样工作TypeDescriptor根本不是从属性中获取自定义转换器.我只能假设我犯了一个明显的错误,但我看不到它. – 编辑 – 当我在自己的控制台中运行时,这段代码似乎工作,我实际上是从一个更复杂的应用程序和不同的命名空间中调用一个转换器. – 编辑 – 或者任何关于如何调试TypeDescriptor的建议,以便我可以看到发生了什么,然后我可以自己回答这个 我想了解为什么下面的代码不能像预期的那样工作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,object value,Type destinationType)        {            if (destinationType == typeof(string) && value.GetType() == typeof(Test))            {                return ((Test)value).TestMember;            }            return base.ConvertTo(context,value,destinationType);        }    }    [TypeConverterattribute(typeof(TestConverter))]    public struct Test    {        public string TestMember { get; set; }    }}
解决方法 我也有这个问题,解决问题的方法是订阅当前应用程序域的AssemblyResolve事件并手动解析程序集.

这远远不是一个很好的解决方案,但它似乎工作.我不知道为什么框架以这种方式行事.我真的很想找到一个更少的黑客方法来解决这个问题.

public voID DoMagic(){    // NOTE: After this,you can use your typeconverter.    AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);}private Assembly CurrentDomain_AssemblyResolve(object sender,ResolveEventArgs args){    AppDomain domain = (AppDomain)sender;    foreach (Assembly asm in domain.GetAssemblIEs())    {        if (asm.Fullname == args.name)        {            return asm;        }    }    return null;}
总结

以上是内存溢出为你收集整理的c# – 为什么TypeConverter不工作?全部内容,希望文章能够帮你解决c# – 为什么TypeConverter不工作?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1239405.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存