The following question and answer discusses the use of the out parameter in a delegate:
Func <T> with out parameter
I need to take one more step. I have several conversion methods (functions) where I would like to use a delegate. For example, let's start with the methods below:
private bool ConvertToInt(string s, out int value) { try { value = Int32.Parse(s); return true; } catch (Exception ex) { // log error value = 0; } return false; } private bool ConvertToBool(string s, out bool value) { try { value = Convert.ToBoolean(s); return true; } catch (Exception ex) { // log error value = false; } return false; } 
Then I declared the following delegate:
 delegate V ConvertFunc<T, U, V>(T input, out U output); 
What I would like to do is something like this (pseudocode):
 if (do int conversion) func = ConvertToInt; else if (do boolean conversion) func = ConvertToBool; else ... 
Only the compiler allows you to explicitly declare delegate identifiers as follows:
 ConvertFunc<string, int, bool> func1 = ConvertToInt; ConvertFunc<string, bool, bool> func2 = ConvertToBool; 
How can I declare a single identifier to which I can assign one of several methods that follow the above pattern (depending on the type of conversion I want to perform)?
Update:
Assuming a dictionary containing value / object pairs:
 private Dictionary<string, object> dict = new Dictionary<string, object>(); 
With values ββsuch as:
 this.dict.Add("num", 1); this.dict.Add("bool", true); 
Based on the answer, I was able to implement my delegate as follows:
 public T GetProperty<T>(string key) { ConvertFunc<string, T, bool> func = ConvertToT<T>; object val = this.dict[key]; T result; if (func(key, out result)) return result; else return default(T); }