具体类型可以接受IEnumerable <t>

时间:2016-04-14 22:12:46

标签: c# c#-4.0

我有一个返回类型为IEnumerable<T>的方法,我需要在变量中捕获此方法的输出。我不能使用var来声明变量,因为变量必须在我的try / catch块之外声明。那么,我可以使用什么具体的Type来声明我的变量,它将接受我的方法的IEnumerable<T>输出?以下是此方案的样子:

IEnumerable<string> CalleeMethod() {...}

IEnumerable<string> CallerMethod() 
{
   List<string> temp = null;
   try
   {
      temp = CalleeMethod();
   }
   catch(Exception exception)
   {
      Debug.WriteLine(exception.GetBaseException().Message);
   }
   return temp;
}

此示例不起作用,因为当我将temp声明为List<T>时,我收到错误:cannot convert IEnumerable<T> to List<T>。我知道我可以调用.ToList(),或者将CalleeMethod()的输出转换为List<T>,但我想简单地定义temp变量,其具有可以保存的IEnumerable<T>变量CalleeMethod()的{​​{1}}输出,无需投出。{1}}那么,我可以将temp声明为具体类型,因为它不会引发cannot convert...错误?

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

您是否尝试过IEnumerable<String>

答案 1 :(得分:0)

只需使用IEnumerable<string> temp = Enumerable.Empty<String>();

即可

答案 2 :(得分:0)

@hvd是正确的。我认为你有一些概念。 &#39; IEnumerable T&#39;是不同的&#39; IEnumerable字符串&#39;。这是一个简单的通用版本......

public class GenericTest
{
    public IEnumerable<T> CalleeMethod<T>() where T : class
    {
        return new List<T>();
    }
}
[TestMethod]
public void IEnumberableT()
{
    var x = new GenericTest();
    IEnumerable<string> result = x.CalleeMethod<string>();
}