稍加改进的Switch/Case扩展方法
2010-09-30 21:05:29 来源:WEB开发网private static int GetReward(int count)
{
return count.Switch((int n, int o) => n + o)
.CaseReturn(f => f > 5, 1, false)
.CaseReturn(f => f > 10, 10, false)
.CaseReturn(f => f > 20, 100, false)
.CaseReturn(f => f > 50, 1000, false)
.CaseReturn(f => f > 100, 1000)
.ReturnValue;
}
有人可能奇怪,为什么方法名都是CaseReturn、DefaultReturn这样的带个Return呢?这不是很啰嗦嘛?直接以Case命名不好吗?
这是因为我还实现了另一种形式:无返回值形式
参看下面的代码:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (IsBusy)
MessageBox.Show(@"下载正在进行中,是否要关闭此窗口并中止下载?
是 - 关闭窗口并中止下载
否 - 仅关闭窗口,不中止下载
取消 - 不进行任何操作", "提示"
, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question).Switch()
.CaseRun(DialogResult.Yes, f => this.Stop())
.CaseRun(DialogResult.No, f => { })
.DefaultRun(f => e.Cancel = true);
}
这段代码通过CaseRun、DefaultRun方法执行传入的表达式,其功能就是根据不同对话框选项进行不同的处理,很容易理解。
更多精彩
赞助商链接