我有一个包含字符串作为键的字典,而对象作为抽象类中的值。 我有两个派生自这个抽象类的类。
其中一个派生类工作正常,所有配置和项都可以加载和检索而不会出现问题。 然而,另一堂课给我带来了麻烦。
当我尝试获取“Domain”类型的对象时;我得到了一个无效的强制转换异常,虽然我将该值添加到字典中作为所述类型。
以下是代码:
email_select
关于如何解决这个问题的任何想法,和/或为什么这不起作用,虽然它的作用就像一个字符串,bool和整数的魅力?
答案 0 :(得分:1)
Convert
类仅支持.NET所知的简单类型,如Int32
,String
,DateTime
。它不支持用户定义或复杂类型,如Domain
。如果您尝试将某些内容转换为不受支持的类型,则方法Convert.ChangeType
会抛出InvalidCastException
。唯一的例外是,如果原始值(output
)已经是所需类型,它将起作用;而不需要实际的转换。
有关详情,请参阅:https://msdn.microsoft.com/en-us/library/dtb69x08(v=vs.110).aspx
如果您确定存储的值是Domain
类型,则记录更多信息。像这样:
logger.Error($"Failed to cast config { key } of type { output.GetType() } to type { typeof(T) }!");
通过这种方式,您可以验证两种类型相同的声明。