相关疑难解决方法(0)

为什么"Func <bool> test = value?F:F"无法编译?

我已经看到了类似的问题,但它们涉及不同类型,所以我认为这是一个新问题.

请考虑以下代码:

public void Test(bool value)
{
    // The following line provokes a compiler error:
    // "Type of conditional expression cannot be determined because there is 
    // no implicit conversion between 'method group' and 'method group".

    Func<bool> test = value ? F : F;
}

public bool F()
{
    return false;
}
Run Code Online (Sandbox Code Playgroud)

现在,根据C#3.0标准,

?:运算符的第二个和第三个操作数控制条件表达式的类型.设X和Y是第二个和第三个操作数的类型.然后,

如果X和Y是相同的类型,那么这是条件的类型否则,如果从X到Y存在隐式转换(第6.1节),而不是从Y到X,则Y是条件表达式的类型.否则,如果从Y到X存在隐式转换(第6.1节),而不是从X到Y,则X是条件表达式的类型.否则,无法确定表达式类型,并发生编译时错误.

在我看来,在我的示例代码中,X和Y必须是相同的类型,因为它们是同一个实体Func.那为什么不编译呢?

c#

20
推荐指数
2
解决办法
1897
查看次数

动作返回void并使用三元运算符获取参数

我想编写一个仅将PerformanceCounterCategory作为参数的Action.我知道有Action <>,Func <>和Delegates,它们之间有一些区别,但我不确定它是什么.有人可以告诉我有什么区别(我读过Action没有返回的地方,或者这可能是Func).

我想写下面的内容:

Action<PerformanceCounterCategory> action = (int > 5) ? action1 : action2;
Run Code Online (Sandbox Code Playgroud)

action1和action2都是返回void但将PerformanceCounterCategory作为(唯一)参数的方法.

这是正确的方法吗?我不断收到有关方法组/ void等的错误,所以我不相信上面的代码对我的需求是最好的.

谢谢

c#

2
推荐指数
1
解决办法
1031
查看次数

标签 统计

c# ×2