Func delegate with no return type

C#.Net

C# Problem Overview


All of the Func delegates return a value. What are the .NET delegates that can be used with methods that return void?

C# Solutions


Solution 1 - C#

All Func delegates return something; all the Action delegates return void.

Func<TResult> takes no arguments and returns TResult:

public delegate TResult Func<TResult>()

Action<T> takes one argument and does not return a value:

public delegate void Action<T>(T obj)

Action is the simplest, 'bare' delegate:

public delegate void Action()

There's also Func<TArg1, TResult> and Action<TArg1, TArg2> (and others up to 16 arguments). All of these (except for Action<T>) are new to .NET 3.5 (defined in System.Core).

Solution 2 - C#

> ... takes no arguments and has a void return type?

I believe Action is a solution to this.

Solution 3 - C#

> All of the Func delegates take at least one parameter

That's not true. They all take at least one type argument, but that argument determines the return type.

So Func<T> accepts no parameters and returns a value. Use Action or Action<T> when you don't want to return a value.

Solution 4 - C#

Try System.Func<T> and System.Action

Solution 5 - C#

A very easy way to invoke return and non return value subroutines. is using Func and Action respectively. (see also https://msdn.microsoft.com/en-us/library/018hxwa8(v=vs.110).aspx)

Try this this example

using System;
					
public class Program
{
    private Func<string,string> FunctionPTR = null;  
    private Func<string,string, string> FunctionPTR1 = null;  
	private Action<object> ProcedurePTR = null; 
		
		
  
    private string Display(string message)  
    {  
        Console.WriteLine(message);  
        return null;  
    }  
  
    private string Display(string message1,string message2)  
    {  
        Console.WriteLine(message1);  
        Console.WriteLine(message2);  
        return null;  
    }  
	
	public void ObjectProcess(object param)
	{
		if (param == null)
		{
			throw new ArgumentNullException("Parameter is null or missing");
		}
		else 
		{
			Console.WriteLine("Object is valid");
		}
	}
	
	
    public void Main(string[] args)  
    {  
        FunctionPTR = Display;  
        FunctionPTR1= Display;  
		ProcedurePTR = ObjectProcess;
        FunctionPTR("Welcome to function pointer sample.");  
        FunctionPTR1("Welcome","This is function pointer sample");   
		ProcedurePTR(new object());
    }  
}

Solution 6 - C#

Occasionally you will want to write a delegate for event handling, in which case you can take advantage of System.EvenHandler<T> which implicitly accepts an argument of type object in addition to the second parameter that should derive from EventArgs. EventHandlers will return void

I personally found this useful during testing for creating a one-off callback in a function body.

Solution 7 - C#

> ... takes no arguments and has a void return type?

If you are writing for System.Windows.Forms, You can also use:

public delegate void MethodInvoker()

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMarcel LamotheView Question on Stackoverflow
Solution 1 - C#JasonView Answer on Stackoverflow
Solution 2 - C#Marcel LamotheView Answer on Stackoverflow
Solution 3 - C#Joel CoehoornView Answer on Stackoverflow
Solution 4 - C#JaredParView Answer on Stackoverflow
Solution 5 - C#Aarón Ibañez WerthermännView Answer on Stackoverflow
Solution 6 - C#AndyGView Answer on Stackoverflow
Solution 7 - C#mojmir.novakView Answer on Stackoverflow