Rol*_*oly 7 c# lambda switch-statement
我最近遇到了一些代码,通过硬编码替换了交换机的使用
Dictionary<string (or whatever we would've been switching on), Func<...>>
Run Code Online (Sandbox Code Playgroud)
而且无论转换到底在哪里,它都会改为dict ["value"].调用(...).代码在某种程度上感觉不对,但与此同时,这些方法确实看起来更清晰一些,特别是在有很多可能的情况下.我不能给出任何关于为什么这是好的或坏的设计的理由,所以我希望有人可以给出一些支持/谴责这种代码的理由.性能有提升吗?失去清晰度?
例:
public class A {
...
public int SomeMethod(string arg){
...
switch(arg) {
case "a": do stuff; break;
case "b": do other stuff; break;
etc.
}
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
变
public class A {
Dictionary<string, Func<int>> funcs = new Dictionary<string, Func<int>> {
{ "a", () => 0; },
{ "b", () => DoOtherStuff(); }
... etc.
};
public int SomeMethod(string arg){
...
funcs[arg].Invoke();
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
好处:
case a + b == 3),而且麻烦少得多缺点:
defaulta switch)你应该用吗?这真的取决于.你必须在某个地方定义字典,所以代码会在某处混乱.你必须自己决定.如果您需要在运行时切换行为,那么字典解决方案确实很突出,特别是,如果您使用的方法没有副作用(即不需要访问范围变量).
有几个原因:
case分支在运行时将执行的操作.否则,你必须编译它.为什么这个解决方案对你不对?如果字典在编译时填充,那么你肯定不会失去任何安全性(进入的代理肯定必须编译而没有错误).你确实失去了一点表现,但是:
| 归档时间: |
|
| 查看次数: |
4435 次 |
| 最近记录: |