所以我有一个泛型类,Type是它的泛型参数。在这个类中是一个方法,它有一个名为value的对象参数。有点像这样:
public class Foo<Type> where Type : IComparable
{
public void Bar(object value)
{
DoSomething((Type)value);
}
}
你可以注意到,我需要&#34; DoSomething&#34;我首先需要转换为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
}
&#39; DoSomething((Type)值)&#39;在这种情况下,Type是GenericType,值是Number.Zero。由于某种原因,这会导致强制转换抛出InvalidCastException:指定的强制转换无效。当我直接尝试时,我的意思是......
GenericType<Number> z = (GenericType<Number>)Number.Zero;
..它有效(我知道,甚至不需要显式演员)。但由于某些原因,它在我上面提到的复杂例子中不起作用。任何人都可以帮助我理解并可能解决这个问题吗?
答案 0 :(得分:1)
为什么不让你的班级使用泛型?
public class Foo<T> where T : IComparable
{
public void Bar(T value)
{
DoSomething(value);
}
}
不需要施法......请不要使用保留字来命名。