Il metodo "Monte Carlo" è una stategia di risoluzione di problemi che utilizza la statistica: se la probabilità di un certo evento è P possiamo simulare in maniera random questo evento e ottenere P facendo (numero di volte in cui il nostro evento è avvenuto)/(simulazioni totali). Vediamo come applicare questa strategia per ottenere un'approssimazione di pi greco. Data un cerch ...
C#
Memoization
Supponiamo di avere un metodo che dobbiamo chiamare più volte e che esegue un calcolo lungo o comunque dispendioso in termini di risorse. Supponiamo anche che non sappiamo prevedere con che parametri chiameremo questo metodo e quindi capiterà di chiamarlo più volte bella stessa esecuzione con gli stessi parametri e ripetere lo stesso calcolo più volte. Come si ottimiz ...
Approfondimento su LINQ - il metodo Where pt 2
Continuiamo con l'analisi del metodo LinqToSQL Where. La prima parte può essere trovata qui Cominciamo col riportare il codice del metodo: public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) { if (source == null) throw Error.ArgumentNull("source"); if (predicate == null) throw Er ...
Approfondimento su LINQ - il metodo Where pt 1
Da questo post inizieremo ad analizzare tutti i metodi che compongono LinqToSQL e le loro rispettive implementazioni, liberamente consultabili sul sito http://referencesource.microsoft.com. La maggior parte dei metodi LinqToSQL sono extension method definiti nella classe statica Enumerable e applicabili ad oggetti che implementano l’interfaccia IEnumerable<T> (quindi la v ...
Approfondimento su LINQ – la keyword “yield return”
Per implementare l'interfaccia Ienumerable è necessario poter costruire una istanza di un IEnumerator. È necessario quindi implementare i metodi: - MoveNext - Reset - Dispose E la proprietà Current sia nella versione generica che in quella non generica in quanto l'interfaccia generica estende quella non generica. Per semplificare questo processo è possibile utilizzare l’i ...
Approfondimento su LINQ - l’interfaccia IEnumerable
Inauguriamo con questo post una serie su LinqToObject (da adesso in poi Linq) in cui andremo a studiare i sorgenti per capire in che modo questa funzionalità è stata implementata. Per chi non lo conoscesse Linq permette di eseguire numerose operazioni su delle collezioni di elementi tra cui: - Filtrare - Proiettare - Medie e somme - Inte ...
Abilitare la funzione “ricordami” i provider social in un progetto web forms
In questo articolo spieghiamo come implementare in modo semplice e rapido la funzione “ricordami” con le login social. Creando un nuovo progetto web application di tipo “web forms” è possibile scegliere la modalità di autenticazione “Individual User Accounts”. A questo punto abilitare le login social google, facebook o altre si riduce solamente alla configurazione delle varie ...
OpenXML e DateTime
La libreria OpenXML permette di creare e modificare documenti office utilizzando C#. Tra le diverse operazioni che si possono effettuare c’è la possibilità di valorizzare una o più celle di un excel. L’interfaccia del client Excel permette in maniera molto semplice di formattare e decidere il tipo di dati di una cella e le stesse operazioni possono essere effettuate tramite l’ ...
C# e dispatch singolo e multiplo
Cosa si intende per dispatch? Per rispondere a questa domanda, osserviamo innanzitutto gli snippet di codice qua sotto public class Base { public virtual int Metodo() { return 0; } } public class A : Base { public override int Metodo() { return 1; } } public class B : Base { public override int Metodo() { return 2; ...
Anamorfismi, Fibonacci e C#
Qualche tempo fa abbiamo visto qui come costruire la successione di Fibonacci sfruttando gli iteratori e l'interfaccia IEnumerable<T>. Come possiamo generalizzare questo approccio? Quello che abbiamo fatto è stato generare a partire da un seme una successione di valori finché una certa condizione non diventasse falsa. Questo procedimento non è nuovo ed è stato applica ...