【发布时间】:2018-08-27 09:35:57
【问题描述】:
当我们尝试从 Generic Type 类向上转换为正式实现时,会出现转换错误。
在下面的代码中,您可以看到我有一个 FormalClass,它是一个 GenericTypeClass 的实现。当我尝试从 GenericTypeClass 向上转换为 FormalClass 时,它会出现此错误:
“[System.InvalidCastException:无法将“GenericTypeClass`1[TestType]”类型的对象转换为“FormalClass”类型。]”
我知道这行不通,但是如果您需要进行向上转换,解决它的最佳方法是什么?自动映射器? json序列化?其他?
下面是一个 dotnetfiddle (https://dotnetfiddle.net/LLg0vp) 示例:
using System;
public class Program
{
public static void Main()
{
var a = new GenericTypeClass<TestType>();
var b = a as FormalClass;
if (b == null)
Console.WriteLine("'a as Formal' Is NULL");
try
{
var c = (FormalClass)a;
}
catch (Exception ex)
{
Console.WriteLine("'(FormalClass)a' gives this error: " + ex.Message);
}
}
}
public class FormalClass : GenericTypeClass<TestType>
{
}
public class GenericTypeClass<T>
where T : class, IType
{
}
public class TestType : IType
{
}
public interface IType
{
}
【问题讨论】:
-
为什么该演员阵容有效?
GenericTypeClass<TestType>!=FormalClass -
我知道这行不通,当您想做类似的事情时,我正在寻找最佳解决方案。就像使用自动映射器...
-
如果只需要向上转换,只需将
var a =替换为object a =或创建一个基类GenericTypeClass<T>继承自BaseClass a =应该这样做
标签: c# .net generics casting upcasting