在方法参数中使用基类型有什么好处?
以下是一个示例:
private void Foo(List<int> numbers) //R# laments: parameter can be IEnumerable.
{
foreach (var i in numbers) {
Console.WriteLine(i);
}
}
public class Foo : ICloneable
{
public object Clone()
{
return MemberwiseClone();
}
public Foo CopyMe(Foo other) //R# laments: parameter can be ICloneable
{
return (Foo)other.Clone();
}
}
...我们可以更改类型,但Foo在运行时会失败。
所以问题是:当R#建议参数可以是'X'时,我该怎么办?
PS。只是Whysharper - a plugin that dovetails Resharper and StackOverflow的另一种解释。人们说它很好,但缺乏很好的解释 - 希望我们能在一起做得更好;)。
答案 0 :(得分:36)
使用参数的基本类型具有以下好处:
但是,你不应该总是在方法调用中使用基类型,因为像ReSharper这样的工具说它是可能的。您应该确保方法的用法和语义是明确的 - 并且未来的更改可能不需要向下移动继承层次结构 - 可能会破坏现有代码。
在上面的示例中,使用IEnumerable而不是List使得代码的调用者不仅可以传入List对象,还可以传递数组,堆栈,队列,甚至来自LINQ调用(主要返回IEnumerable)的结果。由于您的代码只迭代集合,因此不需要了解List。这也意味着您的代码的消费者不必将他们的集合转换为List类型的副本,只是为了将它们传递给您的方法。
答案 1 :(得分:8)