在下面的代码中,是否更有效(在内存和时间方面)List<string>直接创建,而不是在传递给它之前创建string[]和调用ToList()它SomeMethod()?
如果你创建string[]和调用ToList(),它会创建一个List<string>对象,还有已经拥有string[]?
我问的原因是我看到了代码,他们在创建string[]和调用ToList()之前将它作为参数传递给带List<string>参数的方法,我不确定是否有任何特殊原因.
class Program
    {
        static void Main(string[] args)
        {            
            var array = new string[] { "str1", "str2" };
            SomeMethod(array.ToList());
            var list = new List<string> { "str1", "str2" };
            SomeMethod(list);                        
        }
        static void SomeMethod(List<string> list)
        {
            //do stuff
        }
    }
Run Code Online (Sandbox Code Playgroud)
    Bac*_*cks 10
.ToList()并.ToArray()创建新对象,分配内存,复制值.因此,尽量减少此类操作class Program
{
    static void Main(string[] args)
    {            
        var array = new string[] { "str1", "str2" };
        SomeMethod(array);
        var list = new List<string> { "str1", "str2" };
        SomeMethod(list);                        
    }
    static void SomeMethod(IEnumerable<string> list)
    {
        //do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)
参考.
ToArray列表方法:
public T[] ToArray()
{
  T[] objArray = new T[this._size];
  Array.Copy((Array) this._items, 0, (Array) objArray, 0, this._size);
  return objArray;
}
Run Code Online (Sandbox Code Playgroud)
你可以看到,它复制数据.
ToList方法:
public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source)
{
  if (source == null)
    throw Error.ArgumentNull("source");
  return new List<TSource>(source);
}
Run Code Online (Sandbox Code Playgroud)
你可以看到,它创建了新的列表对象.构造函数List(IEnumerable<T> collection)复制数据.