查看以下代码行:
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转换为数组呢?
由于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[]
,就必须返回一个string
s 数组,并且List<string>
不满足该要求.
OFT建议
您可以使代码values.Length
作为List<string>
构造函数参数传递得更快一些:
List<string> _stringList = new List<string>(values.Length);
Run Code Online (Sandbox Code Playgroud)
它将使用必要的内存量初始化列表内部存储,并允许您添加所有项目而无需重新分配任何内存.
归档时间: |
|
查看次数: |
172 次 |
最近记录: |