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

bla*_*de3 2 c#

我想编写一个仅将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等的错误,所以我不相信上面的代码对我的需求是最好的.

谢谢

Jon*_*eet 6

你需要施放一侧或其他 - 或者不使用条件运算符.

基本上,忽略赋值 - 因为编译器会这样做.它不会使用您尝试分配给变量来计算条件表达式类型的事实.我们只剩下:

(i > 5) ? action1 : action2
Run Code Online (Sandbox Code Playgroud)

作为表达.那是什么类型的?方法组应转换为什么委托类型?编译器无法知道.如果您转换其中一个操作数,编译器可以检查另一个操作数是否可以转换:

(i > 5) ? (Action<PerformanceCounterCategory>) action1 : action2
Run Code Online (Sandbox Code Playgroud)

或者:

Action<PerformanceCounterCategory> action = action2;
if (i > 5)
{
    action = action1;
}
Run Code Online (Sandbox Code Playgroud)

这很不幸,但这就是我害怕的生活:(