En este video te enseñare como se programa recursivamente, te mostrare 3 ejemplos con los cuales comprenderás esta forma de programar rápidamente.
Código fuente
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Recursividad
{
class Program
{
static void Main(string[] args)
{
//ejemplo 1: recorrer un arreglo
int[] arregloDeEnteros = new int[] { 2,1,1,1,1,1,2};
Recorrer(arregloDeEnteros);
//ejemplo 2: sumar elementos de un arreglo
int total = Sumar(arregloDeEnteros);
//ejemplo 3: pintar un arbolito
Bitmap bmp = new Bitmap(100,100);
Pintar(bmp,bmp.Width/2,20);
string path = @"C:\Users\Bioxor\source\repos\Recursividad\Recursividad\arbolito.jpg";
bmp.Save(path,ImageFormat.Bmp);
}
static void Pintar(Bitmap bmp,int x, int n,int y=0)
{
if (y < n)
{
bmp.SetPixel(x, y, Color.Red);
Pintar(bmp,x+1,n,y+1);
Pintar(bmp,x-1,n,y+1);
}
}
static int Sumar(int []arreglo,int posicion=0)
{
if (posicion == arreglo.Length)
return 0;
return arreglo[posicion] + Sumar(arreglo, posicion+1);
}
static void Recorrer(int [] arreglo,int posicion=0)
{
if (posicion == arreglo.Length)
return;
Console.WriteLine(arreglo[posicion]);
Recorrer(arreglo,posicion+1);
}
}
}
Para poder cachar excepciones dentro de una consulta LINQ y poder manipular el error para que no truene la consulta en si misma debemos hacer uso de Lambda, esto es útil cuando nuestra base de datos puede presentar inconsistencias las cuales pueden ocasionar una excepción en ciertos casos, y podemos evitarlo de la siguiente forma:
EntityDB db= new EntityDB();
var lst = from d in db.tabla.ToList() //es importante hacerlo lista
select new TablaViewModel
{
id = d.id,
//campo es string por lo cual
//nuestra función delegada regresara igual string
campo = (new Func<string>(() => {
try {
// suponiendo que exista una referencia
// a una tabla secundaria la cual no siempre exista
// lo cual puede ocasionar una excepción
// de esta manera lo podemos manipular
return d.tablaSecundaria.campo2;
}
catch { return "No existe"; }
}
)
)()
};
De esta manera nuestra consulta no tronara y podemos darle un resultado a la vista donde mostraremos nuestros datos.