4
以下問題及答案解決了使用out參數的委託:如何使用C#委託調用每個具有不同out參數的不同方法?
我需要這一步。我有幾個轉換方法(函數),我想在這裏使用委託。例如,讓我們先從下面的示例方法:
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;
}
我隨後宣佈以下委託:
delegate V ConvertFunc<T, U, V>(T input, out U output);
我想什麼做的是這樣的(僞代碼):
if (do int conversion)
func = ConvertToInt;
else if (do boolean conversion)
func = ConvertToBool;
else ...
編譯器只允許我明確聲明委託標識符如下:
ConvertFunc<string, int, bool> func1 = ConvertToInt;
ConvertFunc<string, bool, bool> func2 = ConvertToBool;
我該如何聲明一個標識符,我可以根據上述模式(根據我希望執行的轉換類型)分配多種方法中的任何一種?
更新:
假設含有的串/對象值對的字典:
private Dictionary<string, object> dict = new Dictionary<string, object>();
隨着值,如:
this.dict.Add("num", 1);
this.dict.Add("bool", true);
基於答案,我能夠實施我的代表如下:
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);
}
很難建議您如何繼續運行,沒有看到該方法的其餘這將* *調用此委託。我懷疑你會發現,當你試圖將僞代碼變成真正的代碼時,編譯器錯誤背後的原因變得更加清晰。 –