我有理由这样做吗
public class Foo {
int Bar() {
return 1;
}
public void Baz() {
int bar = Bar();
// do other stuff
}
}
VS
public class Foo {
public void Baz() {
Func<int> Bar = ()=> {
return 1;
};
int bar = Bar();
// do other stuff
}
}
我想做后者是为了表明Bar只存在于Baz执行的意图,但如果有问题我不想这样做。
答案 0 :(得分:2)
完全虚荣,看起来很聪明,我绝不会在代码中使用它以供其他人使用。如果你和其他任何人都在看这个代码都习惯了这种风格,我发现它没有任何问题。
临:
缺点:
答案 1 :(得分:1)
我会在大多数语言中这样做,但不是C#。符号(指定Func<>
类型,制作一个空的参数列表sigil)看起来太笨重了,而且它不是惯用的。我希望有一个私有方法,即使该方法在其他任何地方都没有意义。
答案 2 :(得分:1)
如果将等效代码放在lambda而不是正确的方法中,则不会有任何问题。您可能需要注意一些事项(例如,确保您不会意外地创建闭包),但假设重构本身不会引入错误,代码也会运行。
然而,恕我直言,决定使用适当的方法与内联lambda不应该基于该方法的使用次数。我个人的规则是:
如果代码执行窄范围的函数(例如,过滤集合的谓词)并且仅在该范围内有意义,则使用lambda - 换句话说,如果它“处理非常小的打印”。如果代码执行与包含它的类的高级功能相关的内容,请将其置于适当的方法中。
答案 3 :(得分:0)
没有理由。将Func
s用作内联函数(
答案 4 :(得分:0)
一般来说;不会把它设置为'私人'完成同样的事情?它会传达出它不打算用于外部消费的想法吗?
我认为你的方法是100%可以接受的。我在生产/团队环境中看到的最大问题是人们(不熟悉它)会说它“令人困惑”。