web-dev-qa-db-ja.com

foreachせずにリストからリストに項目をコピーする方法を教えてください。

Listを使用せずに、1つのforeachに含まれる項目をC#の別の項目に転送する方法を教えてください。

280
ratty

あなたはこれを試すことができます:

List<Int32> copy = new List<Int32>(original);

もしあなたがC#3と.NET 3.5をLinqと一緒に使っているのなら、こうすることができます

List<Int32> copy = original.ToList();

あるリストの内容をすでに存在する別のリストに追加するには、次のようにします。

targetList.AddRange(sourceList);

リストの新しいコピーを作成するだけの場合は、Lasseの回答を参照してください。

161
Jon Skeet

要素の一覧について

List<string> lstTest = new List<string>();

lstTest.Add("test1");
lstTest.Add("test2");
lstTest.Add("test3");
lstTest.Add("test4");
lstTest.Add("test5");
lstTest.Add("test6");

すべての要素をコピーしたい場合

List<string> lstNew = new List<string>();
lstNew.AddRange(lstTest);

最初の3つの要素をコピーしたい場合

List<string> lstNew = lstTest.GetRange(0, 3);
31
Paras

そしてこれは、単一のプロパティを別のリストにコピーする必要がある場合です。

targetList.AddRange(sourceList.Select(i => i.NeededProperty));
5
usefulBee

このメソッドはあなたのリストのコピーを作成しますがあなたの型は直列化可能であるべきです。

使用:

List<Student> lstStudent = db.Students.Where(s => s.DOB < DateTime.Now).ToList().CopyList(); 

方法:

public static List<T> CopyList<T>(this List<T> lst)
    {
        List<T> lstCopy = new List<T>();
        foreach (var item in lst)
        {
            using (MemoryStream stream = new MemoryStream())
            {
                BinaryFormatter formatter = new BinaryFormatter();
                formatter.Serialize(stream, item);
                stream.Position = 0;
                lstCopy.Add((T)formatter.Deserialize(stream));
            }
        }
        return lstCopy;
    }
4
garish

OKこれはうまく機能している上の提案から、GetRange()は引数としてのリストで私のために働きません...だから上の記事からちょっと物事を甘くする:(みんなありがとう:)

/*  Where __strBuf is a string list used as a dumping ground for data  */
public List < string > pullStrLst( )
{
    List < string > lst;

    lst = __strBuf.GetRange( 0, __strBuf.Count );     

    __strBuf.Clear( );

    return( lst );
}
0
Jim Stevens