无法将基实例的对象转换为派生类型(泛型用法)
Cannot convert object of base instance to derived type (generics usage)
我有一个区间的通用版本 start 和 end,以及一个具体的 class 使用 DateTime
.
通用版本为方便起见定义了一个 Empty 值。
当我 运行 这段代码时,问题就来了。
它在 Main 方法的唯一一行中抱怨:
Unable to cast object of type 'Interval`1[System.DateTime]' to type
'DateTimeInterval'.
它抱怨一个实例无法转换为我想要的类型。为什么??我无法理解这个限制。
void Main()
{
DateTimeInterval p = (DateTimeInterval)DateTimeInterval.Empty;
}
class Interval<T>
{
public Interval(T start, T end)
{
Start = start;
End = end;
}
public T Start { get; set; }
public T End { get; set; }
public static Interval<T> Empty = new Interval<T>(default, default);
}
class DateTimeInterval : Interval<DateTime>
{
public DateTimeInterval(DateTime start, DateTime end):base(start, end)
{
}
}
此问题与变体和泛型无关。下一个代码会给你同样的错误:
class Interval1
{
public static Interval1 Empty = new Interval1();
}
class DateTimeInterval1 : Interval1
{
}
DateTimeInterval1 p = (DateTimeInterval1)DateTimeInterval1.Empty;
原因是 Empty
是 Interval
而非 DateTimeInterval
的实例,因此无法转换为 DateTimeInterval
。
我有一个区间的通用版本 start 和 end,以及一个具体的 class 使用 DateTime
.
通用版本为方便起见定义了一个 Empty 值。 当我 运行 这段代码时,问题就来了。
它在 Main 方法的唯一一行中抱怨:
Unable to cast object of type 'Interval`1[System.DateTime]' to type 'DateTimeInterval'.
它抱怨一个实例无法转换为我想要的类型。为什么??我无法理解这个限制。
void Main()
{
DateTimeInterval p = (DateTimeInterval)DateTimeInterval.Empty;
}
class Interval<T>
{
public Interval(T start, T end)
{
Start = start;
End = end;
}
public T Start { get; set; }
public T End { get; set; }
public static Interval<T> Empty = new Interval<T>(default, default);
}
class DateTimeInterval : Interval<DateTime>
{
public DateTimeInterval(DateTime start, DateTime end):base(start, end)
{
}
}
此问题与变体和泛型无关。下一个代码会给你同样的错误:
class Interval1
{
public static Interval1 Empty = new Interval1();
}
class DateTimeInterval1 : Interval1
{
}
DateTimeInterval1 p = (DateTimeInterval1)DateTimeInterval1.Empty;
原因是 Empty
是 Interval
而非 DateTimeInterval
的实例,因此无法转换为 DateTimeInterval
。