所以我有一个泛型类,Type是它的泛型参数。在这个类中是一个方法,它有一个名为value的对象参数。有点像:
public class Foo<Type> where Type : IComparable
{
public void Bar(object value)
{
DoSomething((Type)value);
}
}
正如您所注意到的,我需要使用值(存储在对象中)的“DoSomething”,我首先需要将其强制转换为Type。我甚至有自己的被覆盖的演员阵容,它独立运作。
在这种特定情况下,Type是通用的,我们称之为GenericType,并具有此用户定义的强制转换:
public static implicit operator GenericType<T>(T value)
{
return new GenericType<T>(value);
}
我们说,值是一个枚举
public enum Number: short
{
Zero = 0,
One = 1,
Two = 2
}
在这种情况下,'DoSomething((Type)value''是Type为GenericType,值为Number.Zero。由于某种原因,这会导致强制转换抛出InvalidCastException:指定的强制转换无效。当我直接尝试时,我的意思是..
GenericType<Number> z = (GenericType<Number>)Number.Zero;
..是有效的(我知道,甚至不需要明确的演员)。但由于某些原因,它在我上面提到的复杂例子中不起作用。谁能帮助我理解并可能解决这个问题?
为什么不让你的班级使用泛型?
public class Foo<T> where T : IComparable
{
public void Bar(T value)
{
DoSomething(value);
}
}
不需要铸造......请不要使用保留字来命名。