在 C# (3.0) 中使用条件 (?:) 运算符进行方法选择?

2024-03-03

我正在重构一些代码。

目前有不少地方有这样的功能:

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 无法确定条件表达式的类型,因为‘方法组’和‘方法组’之间没有隐式转换”

这将使我认识到参数列表与初始重构相同,给出不变的行为,并且还在单个位置重构调用,确保在这些不同的重构过程中,当我将调用接口更改为方法时,不会有任何问题。

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

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

现在,我正在解决这个问题:

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

问题是参数列表确实很长,并且将被重构,我更愿意首先合并它们,并在更改它们时处理编译器错误。


For the ?为了工作,编译器需要至少一个操作数的显式类型。您可以通过强制转换操作员在此处提供一个

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

Replace T*与委托参数的实际类型

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C# (3.0) 中使用条件 (?:) 运算符进行方法选择? 的相关文章

随机推荐