作为演习的一部分,我试图用一种特定类型的使用时,定义一个通用类的特定行为。 更精确地,我想知道是否有可能定义一个通用类型的显式铸造操作者,即从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[]
}
}
然而,这并不工作。 如何使编译器的任何想法有苦难言?
首先, 请更改类遵循.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();
个人而言,我会发现,不是一个明确的转换操作符更清晰的反正。