apo*_*fos 2 c# casting ternary-operator
我有这个问题:
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;
}
Run Code Online (Sandbox Code Playgroud)
但是我收到此错误:
错误42无法确定条件表达式的类型,因为"方法组"和"方法组"之间没有隐式转换
但是,如果我这样做:
Func<string, string> transformer = isRTF ? (Func<string, string>) ToRTF : (Func<string, string>) ToHTML;
Run Code Online (Sandbox Code Playgroud)
它没有问题,ReSharper开始抱怨演员表是多余的.
有谁知道为什么会这样?
这是因为双方都需要从方法组*转换为Func<string,string>.编译器具有从给定给另一个方法组的类型推断一个方法组的类型的规则,但是对于:具有方法组的双方的情况没有规则.
您只能在一侧进行转换,让编译器为您推断另一方.您还可以使用var声明来避免重复类型:
var transformer = isRTF ? new Func<string,string>(ToRTF) : ToHTML;
Run Code Online (Sandbox Code Playgroud)
*委托的隐式定义中使用的方法名称被视为方法组,因为单个名称可以表示多个重载方法.
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |