作为练习的一部分,我试图在与特定类型一起使用时为泛型类定义特定行为。更确切地说,我想知道是否可以为泛型类型定义显式的转换运算符,即从list<T>
到int[]
不,我知道我可以简单地定义一个完成工作的方法,但这不是练习的目标。
假设泛型类list<T>
我试图定义以下显式转换方法
class list<T> {
...
public static explicit operator int[](list<T> _t) where T : System.Int32
{
// code handling conversion from list<int> to int[]
}
}
然而,这不起作用。关于如何让编译器吞下这个的任何想法?
答案 0 :(得分:4)
首先,请更改类的名称以遵循.NET约定和避免与List<T>
发生冲突。
除此之外,你基本上不能做你想做的事情。您可以定义对所有 T
有效的转化,然后针对不同的情况采取不同的操作。所以你可以写:
public static explicit operator T[](CustomList<T> input)
,如果T
为int
,则对此区别对待。做最后一部分并不好,但如果你真的想要,你就可以做到。
特定泛型类型的可用成员是相同的类型参数(在类型参数声明点声明的约束内) - 否则它不是真正的通用。
作为替代方案,您可以在其他地方的顶级静态非泛型类型中定义扩展方法:
public static int[] ToInt32Array(this CustomList<int> input)
{
...
}
这将允许你写:
CustomList<int> list = new CustomList<int>();
int[] array = list.ToInt32Array();
就个人而言,无论如何,我发现它比显式转换运算符更清晰。