【发布时间】:2012-04-28 06:45:10
【问题描述】:
可能重复:
Collection<T> versus List<T> what should you use on your interfaces?
考虑这个方法——返回的变量myVar是List<T>,但是方法MyMethod()的返回类型是IEnumerable<T>:
public IEnumerable<T> MyMethod(string stuff)
{
var myVar = new List<T>();
//do stuff
return myVar;
}
基本上,我想知道的是,如果将myVar 作为不同的类型返回是否可以。
具体来说,就我的情况而言,“做事”通过DataRow 并将DataRow 中的项目分配给对象列表。我在其他地方也有ICollection 和IList 返回类型的类似情况。
我想返回IEnumerable 或ICollection 的原因是我返回的次数不会超出需要。但同时,这允许调用者在需要时将返回值转换为List。
但是,我的 return 语句返回的是 List,而不是方法的返回类型,这似乎很奇怪。这是正常的做法吗?这样做有什么问题吗?
澄清(回应骗子):
澄清一下,我很好奇的是,我在正文中的 return 语句是否可以返回 List<T>,但方法标头的返回类型为 IEnumerable,或者可能是 @987654338 @、Collection 等...与主体返回语句不同的东西。
【问题讨论】:
-
调用者不应该从 IEnumerable 转换为 List。它返回接口的原因是,是否存在底层列表、可观察集合、简单数组甚至通过 yield return 的列表都无关紧要。
-
我认为这两个建议的骗子比这个问题更接近对方的骗子,尽管它们都密切相关。
-
@ChrisCharabaruk 我同意这个问题不是重复的,我已经对其进行了重新设计,希望能更好地传达我认为使它独一无二的东西。我也投票决定重新提出问题。
标签: c# collections return return-type