在转换为定义的Type C#时出现InvalidCastException

时间:2016-07-15 09:04:59

标签: c# generics dictionary types casting

我有一个包含字符串作为键的字典,而对象作为抽象类中的值。 我有两个派生自这个抽象类的类。

其中一个派生类工作正常,所有配置和项都可以加载和检索而不会出现问题。 然而,另一堂课给我带来了麻烦。

当我尝试获取“Domain”类型的对象时;我得到了一个无效的强制转换异常,虽然我将该值添加到字典中作为所述类型。

以下是代码:

email_select

关于如何解决这个问题的任何想法,和/或为什么这不起作用,虽然它的作用就像一个字符串,bool和整数的魅力?

1 个答案:

答案 0 :(得分:1)

Convert类仅支持.NET所知的简单类型,如Int32StringDateTime。它不支持用户定义或复杂类型,如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) }!");

通过这种方式,您可以验证两种类型相同的声明。