c# – 使用三元语句将扩展方法分配给委托
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 使用三元语句将扩展方法分配给委托,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1749字,纯文字阅读大概需要3分钟。
内容图文
![c# – 使用三元语句将扩展方法分配给委托](/upload/InfoBanner/zyjiaocheng/777/911643e43de34b71820c05aac9688f9c.jpg)
假设
假设我们有一个接口,并为所述接口定义了以下扩展方法(它们的实现并不重要)
public interface IPerson;
public class IPersonExtensionMethods
{
public static bool SayHello(this IPerson talker, IPerson listener);
public static bool SayGoodbye(this IPerson talker, IPerson listener);
}
问题
我们知道这两种扩展方法基本相同,因为它们接受2个IPerson类型的参数,并返回bool.现在,让我们假设我们要将1个扩展方法分配给Func< IPerson,IPerson,bool>类型的委托.我们可以使用:
Func<IPerson, IPerson, bool> whatShouldWeSay;
if (sayHello)
{
whatShouldWeSay = IPersonExtensionMethods.SayHello;
}
else
{
whatShouldWeSay = IPersonExtensionMethods.SayGoodbye;
}
但是,如果我们将if语句转换为速记,如下所示:
Func<IPerson, IPerson, bool> whatShouldWeSay = (sayHello)
? IPersonExtensionMethods.SayHello
: IPersonExtensionMethods.SayGoodbye;
我们收到编译错误消息:
Type of conditional expression cannot be determined because there is
no implicit conversion between ‘method.group’ and ‘method.group’
题
为什么会出现此错误?是否由于代表的性质是一种扩展方法;或者是由于short-hand if语句如何确定结果类型?还是它完全不同?
解决方法:
发生错误是因为在三元语句中,结果(true和false)都需要是相同的类型.使用常规方法也会发生同样的事情,而不仅仅是扩展方法.您需要将它们转换为目标类型:
Func<IPerson, IPerson, bool> whatShouldWeSay = (sayHello)
? (Func<IPerson, IPerson, bool>)IPersonExtensionMethods.SayHello
: (Func<IPerson, IPerson, bool>)IPersonExtensionMethods.SayGoodbye;
我在三元语句中使用null时遇到过这种情况,将null转换为某种可空类型感觉很奇怪.这可以在这里以更简单的方式显示:
// Doesn't compile
int? a = true ? 10 : null;
// Compiles
int? a = true ? 10 : (int?)null;
我们得到以下编译器错误:
Type of conditional expression cannot be determined because there is no implicit conversion between ‘int’ and ‘<null>’
内容总结
以上是互联网集市为您收集整理的c# – 使用三元语句将扩展方法分配给委托全部内容,希望文章能够帮你解决c# – 使用三元语句将扩展方法分配给委托所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。