考虑这个例子:
IList<string> _lstColl = new[] { "Alex", "Sam", "Gates", "Riaz" };
Run Code Online (Sandbox Code Playgroud)
我可以将它初始化为:
string[] _stringBag = new[] { "Alex", "Sam", "Gates", "Riaz" };
Run Code Online (Sandbox Code Playgroud)
在这里使用接口有什么好处?
它的优点是它向读者表明你没有使用它碰巧是一个数组的事实.我倾向于将局部变量声明为包含我需要的所有功能的最常规类型.例如,我会这样做:
using (TextReader reader = File.OpenText(...))
Run Code Online (Sandbox Code Playgroud)
而不是指定StreamReader.
它很少非常重要,但确实可以更容易地更改实现的细节.例如,假设出于任何原因我们想要更改您的示例以使用List<T>而不是数组.
你可以改变这个:
IList<string> _lstColl = new[] { "Alex", "Sam", "Gates", "Riaz" };
Run Code Online (Sandbox Code Playgroud)
对此:
IList<string> _lstColl = new List<string> { "Alex", "Sam", "Gates", "Riaz" };
Run Code Online (Sandbox Code Playgroud)
并知道它仍然会编译.一些语义可能不一样,所以你仍然需要小心 - 但至少你知道它不会使用任何特定于数组的方法.