gpt4 book ai didi

c# - 使用条件 (? :) operator for method selection in C# (3. 0)?

转载 作者:IT王子 更新时间:2023-10-29 04:26:49 25 4
gpt4 key购买 nike

我正在重构一些代码。

现在有很多地方有这样的功能:

string error;
if (a) {
error = f1(a, long, parameter, list);
}
else {
error = f2(the_same, long, parameter, list);
}

在重构 f1 和 f2(它们很大,但做类似的事情)之前,我想重构为:

string error = (a ? f1 : f2)(a, long, parameter, list);

就像在 C 中所做的那样。(函数签名是相同的)

但是我得到一个错误:

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

这将使我能够通过初始重构来识别参数列表是相同的,从而提供不变的行为,并且还在一个地方重构调用,确保在所有这些不同的重构过程中,当我更改调用接口(interface)时没有任何东西被破坏方法。

我是不是遗漏了一些小东西,可以让接近这个的语法起作用(而不是一大堆额外的委托(delegate)类型定义等)?

抱歉编辑,但实际上有一个返回值,是的,不幸的是,它是一个字符串。 ;-(

现在,我正在接受这个:

string error = a ? f1(a, long, parameter, list) : f2(a, long, parameter, list);

问题是参数列表确实很长,而且要重构,我宁愿先把它们合并起来,在我改变它们的时候处理编译器错误。

最佳答案

要使 ? 正常工作,编译器至少需要一个操作数的显式类型。您可以在此处通过 cast 运算符提供一个

(a ? (Action<T1,T2,T3,T4>)f1 : f2)(a, long, parameter, list);

用委托(delegate)参数的实际类型替换T*

关于c# - 使用条件 (? :) operator for method selection in C# (3. 0)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5186394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com