Εγω ειμαι ρε Δημοσ. 26 Ιουλίου 2016 Δημοσ. 26 Ιουλίου 2016 Καλησπέρα σας ψάχνοντας για το τι κάνει ακριβώς το Lambda expression ( => ) στην C#. Από την επίσημη σελίδα της Microsoft δεν κατάλαβα και πολλά, μπορεί κάνεις να μου το εξηγήσει ;
kaliakman Δημοσ. 26 Ιουλίου 2016 Δημοσ. 26 Ιουλίου 2016 Καλησπέρα σας ψάχνοντας για το τι κάνει ακριβώς το Lambda expression ( => ) στην C#. Από την επίσημη σελίδα της Microsoft δεν κατάλαβα και πολλά, μπορεί κάνεις να μου το εξηγήσει ; http://www.codeproject.com/Tips/298963/Understand-Lambda-Expressions-in-minutes Κάτι τέτοιο θα βοηθούσε;
παπι Δημοσ. 26 Ιουλίου 2016 Δημοσ. 26 Ιουλίου 2016 T select(Tsource t){ return t.q;} Εδω μια μεθοδος για select. Παιρνει ενα tsource και επιστρεφει το field q Αυτο μπορεις να το γραψεις ως λ (t) => { return t.q;} Ή πιο απλα εφοσον εχει ενα statement (ενα ερωτηματικο) t => t.q
Επισκέπτης Δημοσ. 27 Ιουλίου 2016 Δημοσ. 27 Ιουλίου 2016 Για να καταλάβεις lambdas πρέπει να διαβάσεις για anonymous functions. Επιγραμματικά, σου επιτρέπει να εκτελείς ένα μπλοκ κώδικα χωρίς να χρειαστεί να δημιουργήσεις μια function. Οτιδήποτε μπαίνει μετά το => { } είναι ο κώδικας που θα εκτελεστεί.
defacer Δημοσ. 27 Ιουλίου 2016 Δημοσ. 27 Ιουλίου 2016 Κάνει δύο πράγματα. Το ένα έχει να κάνει με τα λεγόμενα expression trees, αλλά αυτή η περίπτωση είναι πιο προχωρημένη και σχετικά δύσκολο να τη συναντήσεις κατα λάθος, οπότε την προσπερνώ. Όπου διαβάσεις και συ expression tree προσπέρνα για να μη μπερδέψεις τις έννοιες. Το άλλο που κάνει, και που ενδιαφέρει εδώ, είναι να δημιουργήσει μια lambda function, aka anonymous function. Αυτό δεν είναι τίποτα παραπάνω από μια βοήθεια από τον compiler για σένα προκειμένου να εκφράσεις το ίδιο πράγμα που ήδη μπορείς να εκφράσεις χωρίς τη χρήση lambda, με πιο βολικό και άμεσο τρόπο. Στην πιο απλή περίπτωση (δε θα μπω σε λεπτομέρειες), όταν εσύ γράφεις αυτό: var strings = new[] { "short", "loooooooooong" }; var longStrings = strings.Where(s => s.Length > 5); o compiler προσποιείται ότι έχεις γράψει αυτό (σχήμα λόγου): private bool $$$Method$With$Unspeakable$Name<>(string s) { return s.Length > 5; } var strings = new[] { "short", "loooooooooong" }; var longStrings = strings.Where(this.$$$Method$With$Unspeakable$Name<>); παρόλο που το εξετάζουμε τελείως επιφανειακά το θέμα, είναι προφανές ότι ακόμα και σ' αυτή τη σούπερ απλή περίπτωση είναι πολύ βολικότερο να γράψεις το πρώτο παρά το δεύτερο, και τη βρωμοδουλειά να την κάνει ο compiler μόνος του. 2
Alithinos Δημοσ. 27 Ιουλίου 2016 Δημοσ. 27 Ιουλίου 2016 Τις Λάμβδα τις ανέφερε το βιβλίο που έχω στο κεφάλαιο του LINQ, και τις παρουσίασε ως ένα διαφορετικό τρόπο για ερωτήματα (queries). Στα αριστερά του => βάλε ένα όνομα που θα χρησιμοποιηθεί ως μεταβλητή αποκλειστικά μέσα στο lambda expression, και στα δεξιά του μια σχέση που μπορεί να είναι αληθής ή ψευδής. Έτσι θα επιλεχθούν μόνο τα στοιχεία αυτά του συνόλου που πληρούν τη σχέση αυτή. Για παράδειγμα αυτό εδώ: static void Main(string[] args) { double[] temps = { 10.3, 5.2, 24.8, 32.1, 37.9, 41.2 }; var tempsAbove30 = temps.Where(t => t > 30); foreach (var item in tempsAbove30) { Console.WriteLine(item); } Console.ReadLine(); } Θα τυπώσει μόνο τις θερμοκρασίες που είναι μεγαλύτερες των 30 βαθμών, δηλαδή στη κονσόλα θα εμφανιστεί: 32.1 37.9 41.2 Είναι δηλαδή ένας γρήγορος τρόπος για να φιλτράρεις το τι θες να πάρεις από ένα n σύνολο. Να διαλέξεις μόνο τα στοιχεία τα οποία πληρούν κάποιες προϋποθέσεις που εσύ θέλεις. Αυτή εδώ η γραμμή: var tempsAbove30 = temps.Where(t => t > 30); Έχει το ίδιο αποτέλεσμα με αυτό: List<double> tempsAbove30 = new List<double>(); for (int i = 0; i < temps.Length; i++) { if (temps[i] > 30) tempsAbove30.Add(temps[i]); } Ή αυτό: var tempsAbove30 = from t in Temps where t > 30 select t;
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα