Nerede yöntem nasıl çalışıyor?

oy
2

Benim kod geçerli:

using System;
using System.Linq;
using System.Collections.Generic;

public class D {
   public string Value { get; set; }
   public D(string v) { this.Value = v; }
}
public class Program
{
   public static void Main()
   {
       List<D> DD = new List<D>();
       DD.Add(new D(2018-11-08));
       DD.Add(new D(2018-12-01));
       var dd = DD.Where(d=> { 
          Console.WriteLine($In predicate: {d.Value}); 
          return d.Value==2018-12-01; 
       });

       var dl = dd.ToList();
       foreach (var d in dl) {
         Console.WriteLine($Final: {d.Value});
       }
   }
}

çıktısı:

In predicate: 2018-11-08
In predicate: 2018-12-01
Final: 2018-12-01

Eğer DD1000000 elemanları, lambda içinde olacak içerir DD.Where1000000 defa yürütmek?

Ya DDSQL Server bir tablodur?

Oluştur 08/11/2018 saat 11:33
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
6

DD 1000000 öğeler içeriyorsa, DD.Where içinde lambda 1000000 defa çalıştırır?

Cevap istekli çalışmasına bağlıdır . Bu özel durumda evet istekli operasyon olduğu için ToListancak olduğunu söylemek First(), Any()o kısa sürede gerekli kriterleri yerine getirdiği bir öğe bulur olarak kısa devre olur.

Cevap 08/11/2018 saat 11:35
kaynak kullanıcı

oy
0

temelde bir yöntem ve temsilci oluşturur, ve onunla yöntem sözdizimi sürümünü çağırır sorgu sözdizimi. Ne olursa olsun nerede sonucu bulana kadar kaynak dizisinin her elemanı bir temsilci aracılığıyla tek yöntem haline döndü ve daha sonra adı verilir ile çağırın.

Yani muhtemelen tek çek ile ne demek oluyor ne bir bütün ifadesi olarak geçirilen.

Where ( d.Value=="2018-12-01")
It will turn into a single method call like this

bool FindValueExample(var d){
  return (d.Value=="2018-12-01");
}

ve daha sonra her bir elemanı olarak adlandırılır.

Cevap 08/11/2018 saat 11:52
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more