if (salaryItem.CodeId == new Guid("{00000000-00a1-aaaa-0000-010000000002}"))//请假
{
div.AddExpando("CheckItem", AppraiseItem.Leave.ToString("D"));
div.AddExpando("CheckSubItem", salaryItem.CodeItemValue.ToString());
}
else if (salaryItem.CodeId == new Guid("{00000000-00a1-aaaa-0000-010000000005}"))//加班
{
div.AddExpando("CheckItem", AppraiseItem.OverTime.ToString("D"));
div.AddExpando("CheckSubItem", salaryItem.CodeItemValue.ToString());
}
else if (salaryItem.CodeId == new Guid("{00000000-00a1-aaaa-0000-010000010005}"))//旷工
{
div.AddExpando("CheckItem", AppraiseItem.Absence.ToString("D"));
}
else if (salaryItem.CodeId == new Guid("{00000000-00a1-aaaa-0000-010000020005}"))//迟到
{
div.AddExpando("CheckItem", AppraiseItem.Late.ToString("D"));
}
else if (salaryItem.CodeId == new Guid("{00000000-00a1-aaaa-0000-010000030005}"))//早退
{
div.AddExpando("CheckItem", AppraiseItem.LeaveEarly.ToString("D"));
}
这句代码如何优化最好?
由于NewGuid()可读性差,同时为了提高可复用性,可以中间过度一步
public enum WorkState:long
{
Unknow=0,
LeaveWork=1,//请假
ExtraWork=2,//加班
AbsentWork=3,//旷工
Late=4,//迟到
Leave_early=5,//早退
}
而过度方法,也是分离部分为:
private long GenerateIntID(Guid guidId)
最终调用
switch(GetWorkState(GenerateIntID(salaryItem.CodeId))
{
case WorkState.LeaveWork:
{
div.AddExpando("CheckItem", AppraiseItem.Leave.ToString("D"));
div.AddExpando("CheckSubItem", salaryItem.CodeItemValue.ToString());
};
break;
}
我都说了是 16 字节,你还 ConvertToInt64,你得用 decimal 来表示。
@Launcher: 麻烦你以后,回答别人问题,写代码出来,用心帮助人家,不是光动嘴皮子,讲理论。还在这里说三道四。
@king2003: 我就随便摘录几条我以前回答的问题,按照你的要求,有代码,请你再给评价下,我是不是光动嘴皮子,只讲理论:
http://q.cnblogs.com/q/6131/
http://q.cnblogs.com/q/15819/
http://q.cnblogs.com/q/15657/
http://q.cnblogs.com/q/10140/
http://q.cnblogs.com/q/16775/
http://q.cnblogs.com/q/16711/
回答问题有个原则,有些可以给代码,有些不能,为什么呢?因为你不能替代提问者工作。
这种用switch,最好把这段代码抽出来重新封装成一个新方法
switch 的参数要是整型的 我现在就是这边没有整型可以作为参数。
已经提取出来作为一个单独的方法了 就是看看能不能更好的优化。
@何小宝: 谁跟你说switch的参数要是整型的?
可以 switch 字符串的吧!,你把 GUID 转成字符串不就行了,。
另外 GUID 还可以转换成 16 * 8 位整数,还可以 GetHashCode。
这样的话,你既可以用 switch,还可以用 map 。
楼主可以看看重构这本书,也许是你想要的……