【发布时间】:2013-12-07 12:54:05
【问题描述】:
这是我在使用 C# IList 集合时遇到的问题
IList<MyClass> foo = new List<MyClass>();
var bar = new List<MyClass>();
foo.AddRange() // doesn't compile
bar.AddRange() // compile
据我所知,在 C#(与 C++ 相反)中,当我们使用这种语法创建对象时,对象类型获取右侧(赋值)而不是左侧(声明)。
我错过了什么吗?
EDIT
我还是不明白,即使在你的回答之后, foo 和 bar 有相同的类型!
【问题讨论】:
-
"var" 属于 List
类型,它具有“AddRange”方法,而 foo 属于 IList 类型,它是一个没有“AddRange”方法的接口。 -
但是它们都被实例化为 List
类型 -
@Schneider 确实如此,但从编译器的角度来看,
foo的类型是IList<>而不是List<> -
是的,但您将一个变量 (foo) 隐式转换为 IList
-
重点是你创建的对象是List类型的,而你用来引用它的变量却不是。
标签: c# object variable-assignment