C# - 接口 - 类型初始化

use*_*677 0 c#

考虑这个例子:

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)

在这里使用接口有什么好处?

Jon*_*eet 5

它的优点是它向读者表明你没有使用它碰巧是一个数组的事实.我倾向于将局部变量声明为包含我需要的所有功能的最常规类型.例如,我会这样做:

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)

并知道它仍然会编译.一些语义可能不一样,所以你仍然需要小心 - 但至少你知道它不会使用任何特定于数组的方法.