【问题标题】:Assign delegate in If/else vs ?: [duplicate]在 If/else vs 中分配委托?:[重复]
【发布时间】:2019-08-23 11:18:34
【问题描述】:

为什么要编译这段代码:

Func<BeExp, IEnumerable<BeExp>> collectFunc;
if (lhs.Kind == BExpKind.BESum)
{
    collectFunc = CollectSumTerms;
}
else
{
    collectFunc = CollectProdTerms;
}

而这不是?

Func<BeExp, IEnumerable<BeExp>> collectFunc = lhs.Kind == BExpKind.BESum ? CollectSumTerms : CollectProdTerms;

错误:

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

【问题讨论】:

  • 我认为是因为当你使用运算符“:”时,左边(当子句为真时)和右边(当它为假时)必须有相同的类型。

标签: c#


【解决方案1】:

您需要为组中的至少一种方法向conditional operator 提供准确的签名。

var collectFunc = lhs.Kind == BExpKind.BESum ? (Func<BeExp, IEnumerable<BeExp>>)CollectSumTerms : CollectProdTerms;

【讨论】:

    猜你喜欢
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多