gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:46:01 25 4
gpt4 key购买 nike

我试图理解为什么当我尝试在此上下文中使用“List”特定方法“Add”时编译器会抛出错误。错误解释说是因为字段定义。 (IEnumerable 不包括“添加”方法)但是,我在内部上下文中对其进行了更新。如果您能提供合理的解释,我将不胜感激。

注意:我知道那是因为 IEnumerable 是一个接口(interface),我可以改用 IList。然而,我无法理解的是编译器应该在内部上下文中提取类型,但事实并非如此。

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

最佳答案

你的 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");

关于c# - 在 C# 的方法上下文中无法识别列表实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39612015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com