我已经看到了类似的问题,但它们涉及不同类型,所以我认为这是一个新问题.
请考虑以下代码:
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.那为什么不编译呢?
我想编写一个仅将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