2014-10-20 84 views
-3

这个想法是使一个方法可以返回不同类型,在我的情况下,字符串数组,字符串堆栈和字符串列表。C#泛型从一个方法返回多个类型

这是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上的errorsm和其他答案的负载都是模糊和混淆,所以我避免了它们(我试图读取它们中的10个,而没有一个是清晰的,并且都是编译错误)

从我所理解的一个错误是,我不能简单地做

static <T> TestMethod<T> 

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

不,我想返回我喜欢的东西。我看到有人使用Convert.ChangeType,但我想知道你认为什么是这种情况的最佳解决方案。

+4

'我想回到我like'你就是不行。最好你可以返回'IEnumerable '通用的数组,列表和堆栈。 – 2014-10-20 20:47:50

+0

在这种情况下,最好的解决方案很难确定,因为目前尚不清楚您尝试解决的实际问题。如何返回任意东西有用的方法? – 2014-10-20 20:48:57

+0

我想回到IEnumerable接口,正如我在其他人建议接口使用的答案中看到的那样。问题是我对接口有一种特别的憎恨(请参阅我的其他问题),因为我不知道如何处理一个枚举,我不知道如何使用接口并且从未理解它们。 @JeroenMostert该方法将不得不返回与Directory.GetDirectories或GetFiles的文件夹或文件的列表,并返回所需的输出格式 – user2235691 2014-10-20 20:55:50

回答

2

此时,您的方法不是通用的,因为它与T参数无关 - 一种选择是使输出类型成为与所有可能的返回值兼容的类型(以您的示例为例,您的选择为ICollectionIEnumerable,并IEnumerable<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); 
    } 
} 
+0

好的。我讨厌接口,从来不理解为什么它们是有用的,从不需要它们,但我想我必须忍受它们,叹息...所以,一旦我摆脱了方法,我将如何使用IEnumerable?它是什么?像列表一样?像堆栈一样?像什么? – user2235691 2014-10-20 21:01:36

+0

“永远不明白为什么它们是有用的,永远不需要它们”是鸡和鸡蛋的问题。你应该相信身边的证据,即接口的概念既值得理解也有用,而且你可能想要将泛型添加到你应该考虑更多地了解的有用事物列表中。 – 2014-10-20 21:04:34

+0

'user2235691好的。我讨厌接口,从来不理解为什么它们是有用的,从不需要它们,但我想我必须忍受它们,只是因为你不明白它并不会让它变得糟糕。特别值得一读的是这样的东西'IEnumberable'它拯救了我的生命很多次.. :)祝你好运 – MethodMan 2014-10-20 21:06:31

相关问题