作为练习的一部分,我试图为泛型类与特定类型一起使用时定义特定行为。更准确地说,我想知道是否可以为泛型类型定义显式转换运算符,即来自list<T>
to 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[]
}
}
但这是行不通的。关于如何让编译器吞下这个的任何想法?
首先,please更改类的名称以遵循 .NET 约定and避免与发生冲突List<T>
.
如果不这样做,你基本上就无法做你想做的事情。你can定义一个有效的转换all T
,然后针对不同情况采取不同的操作。所以你可以写:
public static explicit operator T[](CustomList<T> input)
然后以不同的方式对待这个如果T
is int
。做最后一部分不太好,但如果你真的愿意的话,你可以做。
无论类型参数如何(在类型参数声明点声明的约束内),特定泛型类型上可用的成员都是相同的 - 否则它不是真正的泛型。
作为替代方案,您可以在其他地方的顶级静态非泛型类型中定义扩展方法:
public static int[] ToInt32Array(this CustomList<int> input)
{
...
}
这将允许你写:
CustomList<int> list = new CustomList<int>();
int[] array = list.ToInt32Array();
就我个人而言,我发现这比显式转换运算符更清晰。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)