gpt4 book ai didi

c# - 如何使用 C# 委托(delegate)调用不同的方法,每个方法都有不同的输出参数?

转载 作者:太空狗 更新时间:2023-10-30 00:56:13 24 4
gpt4 key购买 nike

以下问题和答案解决了在委托(delegate)中使用 out 参数的问题:

Func<T> with out parameter

我需要更进一步。我有几种转换方法(函数),我想在其中使用委托(delegate)。例如,让我们从以下示例方法开始:

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):

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 ...

编译器只允许我如下显式声明委托(delegate)标识符:

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);

根据答案,我能够按如下方式实现我的委托(delegate):

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);
}

最佳答案

我想你正在寻找类似的东西

private bool ConvertToT<T>(string s, out T value)
{
try
{
value = (T)Convert.ChangeType(s, typeof(T));

return true;
}
catch (Exception ex)
{
// log error // not sure what you're trying here?
value = default(T);
}
return false;
}

关于c# - 如何使用 C# 委托(delegate)调用不同的方法,每个方法都有不同的输出参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8249446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com