我为什么要将List转换为Array

Ank*_*kar 3 c# arrays list

查看以下代码行:

public string[] GetStringList(params object[] values)
{
    List<string> _stringList = new List<string>();

    foreach (object value in values)
    {
        _stringList.Add(Convert.ToString(value));

        //Do something
    }

    //Why this invalid?
    return _stringList;

    //Why do required to convert list collection in array
    return _stringList.ToArray();
}
Run Code Online (Sandbox Code Playgroud)

由于列表和数组都是集合,那么为什么我需要将List转换为数组呢?

Mar*_*zek 6

由于List和Array都是集合,那么为什么我需要将List转换为Array?

是的,它们都是集合,但是您的方法签名确切地指定了它返回集合类型,这就是您必须准确返回一个集合类型的原因.

您可以使用以下某个集合接口更改方法声明以返回字符串集合:

public IEnumerable<string> GetStringList(params object[] values)
Run Code Online (Sandbox Code Playgroud)

要么

public ICollection<string> GetStringList(params object[] values)
Run Code Online (Sandbox Code Playgroud)

它可以让你同时返回List<string>string[],因为它们都实现该接口.您也可以返回HashSet<string>甚至Queue<string>(IEnumerable<string>仅限版本.或者编写您自己的类,实现您感兴趣的界面并在您的方法中返回它).

但是一旦声明使用该方法string[],就必须返回一个strings 数组,并且List<string>不满足该要求.

OFT建议

您可以使代码values.Length作为List<string>构造函数参数传递得更快一些:

List<string> _stringList = new List<string>(values.Length);
Run Code Online (Sandbox Code Playgroud)

它将使用必要的内存量初始化列表内部存储,并允许您添加所有项目而无需重新分配任何内存.