在C#中的方法上下文中无法识别列表实例

时间:2016-09-21 09:02:58

标签: c# list compiler-errors ienumerable

我试图理解为什么编译器在我尝试在此上下文中使用“List”特定方法“Add”时会抛出错误。错误说明表明它是由于字段定义。 (IEnumerable不包括“添加”方法)但是,我在内部上下文中新建了它。我将感激合理的解释。

注意:我知道这是因为IEnumerable是一个接口,我可以使用IList。但是,我无法理解的是编译器应该在内部上下文中提取类型但不是。

class Program
{
    private static IEnumerable<string> exampleList;
    public static void Main()
    {
        exampleList = new List<string>();
        exampleList.Add("ex"); // ==> Compiler Error Here.
    }
}

3 个答案:

答案 0 :(得分:3)

您的exampleList被定义为IEnumerable<string>,因此其编译时类型为IEnumerable<string>。因此,当编译器编译代码时,它只能知道它是IEnumerable<string>

存在两个主要修复:

1)将exampleList声明为IList

private static IList<string> exampleList;

2)使用临时变量设置列表内容。

public static void Main()
{
    var list = new List<string>();
    list.Add("ex");
    exampleList = list;
}

只是简单解释为什么编译器只能知道它是IEnumerable,请考虑以下代码:

IEnumerable<string> exampleList;

if (TodayIsAWednesday()) 
{
    exampleList = new List<string>();
}
else 
{
    exampleList = new string[0];
}

// How can the compiler know that exampleList is a List<string>? 
// It can't!
exampleList.Add("ex");

答案 1 :(得分:0)

如下更改您的代码,将解决问题。

private static List<string> exampleList;

或更改静态Main中的代码,如下所示

var newCollection = exampleList.ToList();
newCollection.Add("ex"); //is your new collection with the item added

答案 2 :(得分:0)

如你所见,&#34;我&#34;意味着它是一个Interface.It可以接受所有类型的Enumerable,但没有Add的方法。 您可以看到:https://msdn.microsoft.com/en-us//library/system.collections.ienumerable(v=vs.110).aspx