用于从方法返回多个类型的C#泛型

时间:2014-10-20 20:45:09

标签: c# generics return-type

我的想法是创建一个可以返回不同类型的方法,在我的例子中,字符串数组,字符串堆栈和字符串列表。

这是一个hypotetical代码:

static <T> TestMethod<T>(string [] test,int option)
{
    switch (option)
    {
        case 1://Return array of strings
        return test;

        case 2:
        return new List<string>(test);

        case 3:
        return new Stack<string>(test);
    }
}

我输入一个字符串列表,并通过指定选项输入我需要的内容。

现在,该代码给出了错误的加载和stackoverflow上的其他答案都是模糊和混乱的,所以我避免了它们(我试过读它们中的10个并且没有一个是清楚的并且都在给出编译错误)

据我所知,一个错误是我不能简单地做

static <T> TestMethod<T>

因为我需要以某种方式声明T是什么(字符串,列表等)。

不,我想要归还我喜欢的东西。我看到有人使用Convert.ChangeType,但我想知道你认为对于这种情况最好的解决方案。

1 个答案:

答案 0 :(得分:2)

此时您的方法不是通用的,因为它对T参数没有任何作用 - 一个选项是使输出类型与所有可能的返回值兼容(您的示例是您的选择)是ICollectionIEnumerableIEnumerable<string>):

static IEnumerable<string> TestMethod(string [] test,int option)
{
    switch (option)
    {
        case 1://Return array of strings
        return test;

        case 2:
        return new List<string>(test);

        case 3:
        return new Stack<string>(test);
    }
}

如果你想让第一个参数变得通用,你可以这样做:

static IEnumerable<T> TestMethod<T>(T [] test,int option)
{
    switch (option)
    {
        case 1://Return array of strings
        return test;

        case 2:
        return new List<T>(test);

        case 3:
        return new Stack<T>(test);
    }
}