Assign code to a variable

Costas

Administrator
Staff member
  • Use delegate when you need custom signatures or want to define specific, reusable types.
  • Use Action for methods that don’t need to return any value.
  • Use Func when you require a return value from your callback.
VS2012 compatible
C#:
var getDrink = new Func<DateTime, string>((date) =>
{
  if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday)
      return "1";
  else
      return "2";
});

Console.WriteLine(getDrink(DateTime.Now));

source (mirror)



Func

C#:
// Form1.cs
public partial class Form1: Form
{
  public Form1()
  {
    InitializeComponent();
  }
  private void OpenForm2()
  {
    Form2 form2 = new Form2(OnGridItemDoubleClick);
    form2.Show();
  }
  private string OnGridItemDoubleClick(int id, string name)
  {
    // Your logic here, using id and name
    return $ "ID: {id}, Name: {name}"; // Example return value
  }
}
// Form2.cs
public partial class Form2: Form
{
  private Func < int, string, string > gridDoubleClickFunc;
  public Form2(Func < int, string, string > onGridDoubleClick)
  {
    InitializeComponent();
    gridDoubleClickFunc = onGridDoubleClick;
    dataGridView1.DoubleClick += DataGridView1_DoubleClick;
  }
  private void DataGridView1_DoubleClick(object sender, EventArgs e)
  {
    if (dataGridView1.CurrentRow != null)
    {
      int id = Convert.ToInt32(dataGridView1.CurrentRow.Cells["IdColumn"].Value);
      string name = dataGridView1.CurrentRow.Cells["NameColumn"].Value.ToString();
      string result = gridDoubleClickFunc?.Invoke(id, name);
      // Optionally handle the returned result
    }
  }
}


Action

C#:
// Form1.cs
public partial class Form1: Form
{
  public Form1()
  {
    InitializeComponent();
  }
  private void OpenForm2()
  {
    Form2 form2 = new Form2(OnGridItemDoubleClick);
    form2.Show();
  }
  private void OnGridItemDoubleClick(int id, string name)
  {
    // Your logic here, using id and name
  }
}
// Form2.cs
public partial class Form2: Form
{
  private Action < int, string > gridDoubleClickAction;
  public Form2(Action < int, string > onGridDoubleClick)
  {
    InitializeComponent();
    gridDoubleClickAction = onGridDoubleClick;
    dataGridView1.DoubleClick += DataGridView1_DoubleClick;
  }
  private void DataGridView1_DoubleClick(object sender, EventArgs e)
  {
    if (dataGridView1.CurrentRow != null)
    {
      int id = Convert.ToInt32(dataGridView1.CurrentRow.Cells["IdColumn"].Value);
      string name = dataGridView1.CurrentRow.Cells["NameColumn"].Value.ToString();
      gridDoubleClickAction?.Invoke(id, name);
    }
  }
}
 
Top