kzen.dev
  • Întrebări
  • Tag-uri
  • Utilizatori
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
 Stratton
Stratton
Question

converti o listă de obiecte de la un tip la altul folosind expresie lambda

Am o buclă foreach citind o lista de obiecte de un tip și produce o listă de obiecte de un tip diferit. Mi s-a spus că o expresie lambda poate obține același rezultat.

var origList = List<OrigType>(); // assume populated
var targetList = List<TargetType>(); 

foreach(OrigType a in origList) {
    targetList.Add(new TargetType() {SomeValue = a.SomeValue});
}

Orice ajutor ar fi apreciat - am'm noi de la lambda si linq multumesc, s

200 2009-12-15T18:06:13+00:00 11
Ian P
Ian P
Întrebarea editată 15 decembrie 2009 в 6:08
Programare
c#
generics
lambda
 JaredPar
JaredPar
15 decembrie 2009 в 6:09
2009-12-15T18:09:41+00:00
Mai mult
Sursă
Editează
#9815451

Încercați următoarele

var targetList = origList
  .Select(x => new TargetType() { SomeValue = x.SomeValue })
  .ToList();

Acest lucru este folosind o combinație de Lambda și LINQ pentru a obține soluția. Funcția de Selectare este o proiecție stil de metoda care se va aplica trecut în delega (sau lambda în acest caz) pentru fiecare valoare în colecția originală. Rezultatul va fi returnat într-o nou IEnumerable<TargetType>. A .ToList apel este o metodă de prelungire, care va converti acest IEnumerable<TargetType> "într-o" Listă<TargetType>.

288
0
Jon Skeet
Jon Skeet
15 decembrie 2009 в 6:11
2009-12-15T18:11:24+00:00
Mai mult
Sursă
Editează
#9815454

Dacă știu vrei pentru a converti din Lista " la " Listaapoi [Listă.ConvertAll][1] va fi puțin mai eficient decât "Selectați" /ToList pentru că știe exact dimensiunea pentru a începe cu:

target = orig.ConvertAll(x => new TargetType { SomeValue = x.SomeValue });

În cazul general, când știi numai despre sursa ca o IEnumerable<T>, folosind Selectați/ToList este calea de a merge. Ai putea de asemenea, susțin că într-o lume cu LINQ, l's mai idiomatice pentru a începe cu... dar l's valoare de cel puțin conștienți fiind de ConvertAll opțiune.

210
0
 Alp
Alp
30 octombrie 2013 в 10:45
2013-10-30T22:45:18+00:00
Mai mult
Sursă
Editează
#9815458
var target = origList.ConvertAll(x => (TargetType)x);
49
0
 Pranav
Pranav
8 iunie 2012 в 12:43
2012-06-08T12:43:32+00:00
Mai mult
Sursă
Editează
#9815457
List<target> targetList = new List<target>(originalList.Cast<target>());
Kyle Trauberman
Kyle Trauberman
Răspuns editat 6 iulie 2012 в 2:08
28
0
Andy White
Andy White
15 decembrie 2009 в 6:10
2009-12-15T18:10:59+00:00
Mai mult
Sursă
Editează
#9815452

Cred că ceva de genul acesta ar trebui să funcționeze:

origList.Select(a => new TargetType() { SomeValue = a.SomeValue});
Muhammad Raheel
Muhammad Raheel
Răspuns editat 22 februarie 2017 в 1:21
14
0
Ian P
Ian P
15 decembrie 2009 в 6:12
2009-12-15T18:12:45+00:00
Mai mult
Sursă
Editează
#9815456

Aici's un exemplu simplu..

List<char> c = new List<char>() { 'A', 'B', 'C' };

List<string> s = c.Select(x => x.ToString()).ToList();
9
0
Chris Arnold
Chris Arnold
15 decembrie 2009 в 6:11
2009-12-15T18:11:56+00:00
Mai mult
Sursă
Editează
#9815455
var list1 = new List<Type1>();
var list2 = new List<Type2>();

list1.ForEach(item => list2.Add(new Type2() { Prop1 = value1 }));
7
0
Max Chu
Max Chu
2 octombrie 2018 в 7:13
2018-10-02T07:13:04+00:00
Mai mult
Sursă
Editează
#9815460

Să presupunem că aveți mai multe proprietăți pe care doriți să o convertiți.

public class OrigType{
    public string Prop1A {get;set;}
    public string Prop1B {get;set;}
}

public class TargetType{
    public string Prop2A {get;set;}
    public string Prop2B {get;set;}
}

var list1 = new List<OrigType>();
var list2 = new List<TargetType>();

list1.ConvertAll(x => new OrigType { Prop2A = x.Prop1A, Prop2B = x.Prop1B })
3
0
 jaimenino
jaimenino
5 septembrie 2018 в 3:47
2018-09-05T03:47:27+00:00
Mai mult
Sursă
Editează
#9815459

Dacă aveți nevoie pentru a utiliza o funcție pentru a arunca:

var list1 = new List<Type1>();
var list2 = new List<Type2>();

list2 = list1.ConvertAll(x => myConvertFuntion(x));

În cazul în care obiceiul meu de funcție este:

private Type2 myConvertFunction(Type1 obj){
   //do something to cast Type1 into Type2
   return new Type2();
}
0
0
A. Morel
A. Morel
23 februarie 2019 в 11:59
2019-02-23T11:59:05+00:00
Mai mult
Sursă
Editează
#9815462

Sau cu un constructor` & "link-ul" cu "Selectați":

public class TargetType {
  public string Prop1 {get;set;}
  public string Prop1 {get;set;}

  // Constructor
  public TargetType(OrigType origType) {
    Prop1 = origType.Prop1;
    Prop2 = origType.Prop2;
  }
}

var origList = new List<OrigType>();
var targetList = origList.Select(s=> new TargetType(s)).ToList();  

Link-ul linie este mai moale! ;-)

0
0
Arun Solanki
Arun Solanki
5 decembrie 2018 в 1:51
2018-12-05T13:51:31+00:00
Mai mult
Sursă
Editează
#9815461

pentru un tip similar de clasă.

Lista targetlst= JsonConvert.DeserializeObject<List>(JsonConvert.SerializeObject(<List)); `

-1
0
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
Utilizatori
Toate
Nou
Populare
1
Daniel Gogov
Înregistrat 2 zile în urmă
2
工藤 芳則
Înregistrat 1 săptămână în urmă
3
Ирина Беляева
Înregistrat 1 săptămână în urmă
4
Darya Arsenyeva
Înregistrat 2 săptămâni în urmă
5
anyta nuam-nuam (LapuSiK)
Înregistrat 2 săptămâni în urmă
DE
ES
ID
JA
KO
RO
RU
TR
ZH
© kzen.dev 2023
Sursă
stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire