0
この質問は、オブジェクトの複製についてではなく、オブジェクトのリストを複製するための拡張メソッドを使用するLinqの正しい使い方についてです。LinqとC#でのオブジェクトのクローニング
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<MyObj> myObjs = DB.GetAllMyObjs(); //fictitious database calls returns a list of Objs
//I now want to use my extension method clone to clone all the MyObjs in myObjs
// this throws an error;
List<MyObj> myObj2 = myObjs.ForEach(a => a.Clone()).ToList(); //ERROR = "."cannot be applied to type void
}
}
public class MyObj
{
public int Id { get; set; }
}
public static class MyObjExtentions
{
public static MyObj Clone(this MyObj myObj)
{
var myObjClone = new MyObj();
myObjClone.Id = myObj.Id;
return myObjClone;
}
}
}
私は、LINQのコード上のエラーを取得しています。これを行うことが可能か、foreachループが必要ですか?
あなたは拡張メソッドの代わりにICloneableを使用することを考えましたか? – maximdumont
'ForEach'がLINQでないことはかなり確信しています。 – Abion47
正しい。 'ForEach() 'は 'List(T)'のメソッドです。 https://msdn.microsoft.com/en-us/library/bwabdf9z(v=vs.110).aspxを参照してください。大きな違いは、すべてのLINQ拡張が何かを返し、本質的に不変であることです。 'ForEach'は反復処理されるオブジェクトを操作するために使用できます。 – Michael