2

作为练习的一部分,我试图为泛型类定义与特定类型一起使用时的特定行为。更准确地说,我想知道是否可以为泛型类型定义显式转换运算符,即 from list<T>toint[]

不,我知道我可以简单地定义一个完成工作的方法,但这不是练习的目标。

假设泛型类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[]
    }
}

然而,这不起作用。关于如何让编译器吞下这个的任何想法?

4

1 回答 1

4

首先,更改类的名称以遵循 .NET 约定避免与 .NET 冲突List<T>

有了这个,你基本上不能做你想做的事。您可以定义对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();

无论如何,我个人会发现这比显式转换运算符更清楚。

于 2012-10-07T08:28:20.880 回答