うっかり見落としていました。
ArrayList.Cloneメソッドを置き換えるList<T>のそのものずばりのメソッドは無いと思っていました。
従来の解釈はこれ。
- ToAttayメソッド→配列への変換
- ToListメソッド→List<T>への変換
ところは、この2つはIEnumerable<T>のメソッドだから、IEnumerable<T>を実装したList<T>でも使用できます。その場合、ToListは自分自身の取得を意味するかというとさにあらず。ちゃんと新規に作ったList<T>のインスタンスを返してくれるようです。
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main(string[] args)
{
var a = new List<string>() { "abc", "def" };
var b = a.ToList();
var c = a;
Console.WriteLine("a and b is same instance?: {0}", a == b);
Console.WriteLine("a and c is same instance?: {0}", a == c);
}
}
実行結果 §
a and b is same instance?: False
a and c is same instance?: True
余談 §
LINQのメソッドなので、.NET Framework 3.5以降でしか使用できないテクニックです。using System.Linq;も必須です。それゆえに、2.0~3.0のList<T>はあるのにLINQ非対応のバージョンでは使えない方法です。