2016-04-07 30 views
2

from in select hakkında daha iyi anlamak için küçük bir örnek yapıyorum.linq - from from

Benim örnek:

class Person 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 

    public Person(string name, int age) 
    { 
     this.Name = name; 
     this.Age = age; 
    } 
} 
class Program 
{ 
    static void Main() 
    { 
     var list = new List<Person>(); 
     list.Add(new Person(name: "Hermione", age: 20)); 

     var persons = from p in list select new { p.Age, p.Name };    
     foreach (var person in persons) 
     { 
      Console.WriteLine($"Name: {person.Name}. Age: {person.Age}"); 
     } 

     var _persons = from p in list select new Person(p.Name, p.Age); 
     foreach (var person in _persons) 
     { 
      Console.WriteLine($"Name: {person.Name}. Age: {person.Age}"); 
     } 
    } 
} 

İkisi de aynı sonucu verir:

Adı: Hermione. Yaş: 20

Soruma göre: İlk ve ikinci bahis arasındaki fark nedir? Ve ilk/saniye ne zaman kullanılır?

cevap

2

İlk anonim tip var persons = from p in list select new { p.Age, p.Name }; Yani örneğin özelliklerinin rastgele isimler yapabilirsiniz olan

var persons = from p in list select new { AgesSomeWithDay = p.Age , FullName = p.Name + p.Name }; 

ANCAK kuvvetle burada olduğu için rastgele adlandırılmış özellikleri yapamaz yazıldığındavar _persons = from p in list select new Person(p.Name, p.Age); new Person ve Person sınıfı, yalnızca sizin için atanabilir ve _persons'a atanabilecek iki özellik içerir

3

var persons = from p in list select new { p.Age, p.Name }; - anonim tip

var _persons = from p in list select new Person(p.Name, p.Age); yaratır - Göre Kişi

yaratır https://msdn.microsoft.com/en-us/library/bb397696.aspx

tipik bir alt kümesini döndürmek için bir sorgu ifade seçme maddesi olarak kullanılan

Anonim türleri Kaynak dizisinde 'daki her nesneden özellikler.

Anonim tipler bir veya daha fazla genel salt okunur özellik içerir. yöntem ve olayları gibi diğer sınıf üyeleri geçerli değildir. Bir özelliği başlatmak için kullanılan ifade boş olamaz, anonim bir işlev veya bir işaretçi türü.

Anonim tipler, nesneden doğrudan türeyen sınıf türleri ve nesne dışındaki herhangi bir türe dönüştürülemeyen şeklindedir. Bütün buradan

+0

OP gerçekten bunu anlamak istiyorsa, tPeek] (https://www.jetbrains.com/decompiler/), OP'nin küçük uygulamasını derleyin ve derleyicinin oluşturduğu koda bakın (dotPeek ile derleyicinin oluşturduğu kodu etkinleştirmeniz gerekir). Bu, gerçekten ne anlatmaya çalıştığınızı görselleştirmeye yardımcı olacaktır. – CodingGorilla