如何使用C#delegate调用不同的方法,其中每个方法都有不同的out参数?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何使用C#delegate调用不同的方法,其中每个方法都有不同的out参数?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1576字,纯文字阅读大概需要3分钟。
内容图文
![如何使用C#delegate调用不同的方法,其中每个方法都有不同的out参数?](/upload/InfoBanner/zyjiaocheng/815/481ed7bc097346a99526c7b78066b53a.jpg)
以下问题和答案解决了在委托中使用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);
}
解决方法:
我想你正在寻找类似的东西
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#delegate调用不同的方法,其中每个方法都有不同的out参数?全部内容,希望文章能够帮你解决如何使用C#delegate调用不同的方法,其中每个方法都有不同的out参数?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。