将三元运算符用于相同类型的Funcs需要强制转换 - c#

我有这个问题:

Func<string,string> transformer = isRTF ? ToRTF : ToHTML;

private string ToRTF(string value) {
    //Convert to RTF 
    return value;        
}
private string ToHTML(string value) {
    //Convert to HTML
    return value;    
}

但是我收到此错误:

错误42无法确定条件表达式的类型,因为“方法组”和“方法组”之间没有隐式转换

但是,如果我这样做:

Func<string, string> transformer = isRTF ? (Func<string, string>) ToRTF : (Func<string, string>) ToHTML;

它可以正常工作,并且ReSharper开始抱怨演员过多。

有人知道为什么会这样吗?

参考方案

这是因为双方都需要从方法组*转换为Func<string,string>。编译器具有从一个方法组的类型推断给另一个方法组的类型的规则,但是对于:的两面都具有方法组的情况没有任何规则。

您只能在一侧进行转换,然后让编译器为您推断另一侧。您也可以使用var作为声明,以避免重复该类型:

var transformer = isRTF ? new Func<string,string>(ToRTF) : ToHTML;

*在委托的隐式定义中使用的方法名称被视为方法组,因为单个名称可以表示多个重载方法。

string.split(“ _(B”) - java

基本上,这行代码行不通,我不确定原因: String[] stringHolder = string.split("_(B"); 我收到此错误:索引3附近的未封闭组此行代码有效: String[] stringHolder = string.split("_B"); 因此,这使我相信它是由“(”引起的。有人可以告诉我如…

为什么要使用Func <string>而不是string? - c#

为什么要使用Func<string>而不是string?我的问题特别是关于this回购。有问题的行是22: private static Func<string> getToken = () => Environment.GetEnvironmentVariable("GitHubToken", Enviro…

LeetCode题解计算机为什么是基于二进制的?

可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制

LeetCode题解统计城市的所有灯泡

这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…

LeetCode题解黑白圆盘

一个圆盘被涂上了黑白二色,两种颜色各占一个半圆。圆盘以一个未知的速度、按一个未知的方向旋转。你有一种特殊的相机可以让你即时观察到圆上的一个点的颜色。你需要多少个相机才能确定圆盘旋转的方向?题解:可以用一个相机即可