很多人喜欢在网上,论坛里,QQ群里,向别人要代码...... 而我个人习惯,不太喜欢看别人代码,因为扔在论坛上的代码,虽然也有精品的,但是大多是新手练手,每每有看到哭笑不得的代码. 所以一般只看运行,看代码也就看看结构,层次.
可是工作中,却每每需要去看别人的代码.....今天就遇到一个极品垃圾代码...
一个类里面接近900行代码....线程不安全也就算了,真正能用的代码,不足一半,而那不足一半的代码中,几乎全是垃圾. 让人苦笑.
举几个例子,也算给大家乐一乐,对新手也好引以为戒. 人都是新手走来的,都犯过低级错误,关键是不要有下次.
1, 获取上个星期的今天. 用了长长的代码, 首先新建了SqlConnectin和SqlCommand, SqlDataAdapter.....然后从数据库执行"SELECT getdate()" 语句,得到一个DataSet, 然后从这个DataSet的Tables[0].Rows[0][0] 得到一个代码当前日期的object, 为了转成DataTime ,使用了DateTime.Parse(),而这个方法需要string,所以又ToString()了一下...... ....然后再费尽方法,在上面去掉了1星期.........
其实大家都知道,这本非常简单的一句就够了

2,获取本月的最后一天. 比上面更夸张.....整整用了近100行代码.....
1
/// <summary>
2
/// 获取当月的月未时间 如:20051130
3
/// </summary>
4
/// <returns></returns>
5
public static DateTime GetMonthEnd(DateTime dt)
6
{
7
DateTime EndDate;
8
string strYear, strMonth, strDay;
9
strYear = dt.Year.ToString();
10
strMonth = (dt.Month > 9) ? dt.Month.ToString() : "0" + dt.Month.ToString();
11
strDay = GetDaysOfMonth(dt).ToString();
12
string strDate = strYear + "-" + strMonth + "-" + strDay;
13
EndDate = Convert.ToDateTime(strDate);
14
return EndDate;
15
16
17
}
18
19
/// <summary>本月有多少天</summary>
20
/// <param name="dt">日期</param>
21
/// <returns>天数</returns>
22
private static int GetDaysOfMonth(DateTime dt)
23
{
24
int year, month, days = 0;
25
year = dt.Year;
26
month = dt.Month;
27
28
//--利用年月信息,得到当前月的天数信息。
29
switch (month)
30
{
31
case 1:
32
days = 31;
33
break;
34
case 2:
35
if (IsRuYear(dt))
36
{
37
days = 29;
38
}
39
else
40
{
41
days = 28;
42
}
43
44
break;
45
case 3:
46
days = 31;
47
break;
48
case 4:
49
days = 30;
50
break;
51
case 5:
52
days = 31;
53
break;
54
case 6:
55
days = 30;
56
break;
57
case 7:
58
days = 31;
59
break;
60
case 8:
61
days = 31;
62
break;
63
case 9:
64
days = 30;
65
break;
66
case 10:
67
days = 31;
68
break;
69
case 11:
70
days = 30;
71
break;
72
case 12:
73
days = 31;
74
break;
75
}
76
77
return days;
78
79
}
80
81
/// <summary>判断当前日期所属的年份是否是闰年</summary>
82
/// <param name="dt">日期</param>
83
/// <returns>是闰年:True ,不是闰年:False</returns>
84
private static bool IsRuYear(DateTime idt)
85
{
86
int n;
87
n = idt.Year;
88
89
if ((n % 400 == 0) || (n % 4 == 0 && n % 100 != 0))
90
{
91
return true;
92
}
93
else
94
{
95
return false;
96
}
97
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

其实只需要1句:
DateTime.Parse(dt.ToString("yyyy-MM-01")).AddMonths(1).AddDays(-1);
下个月1号向前走一天就是这个月最后一天了.整个类的各种方法代码中稀奇古怪的什么都有, 其实只是希望提醒一些新手,写代码注意思考.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· C#多线程编程精要:从用户线程到线程池的效能进化论
· 如何反向绘制出 .NET程序 异步方法调用栈
· 领域驱动设计实战:聚合根设计与领域模型实现
· 突破Excel百万数据导出瓶颈:全链路优化实战指南
· 如何把ASP.NET Core WebApi打造成Mcp Server
· C#开发的Panel滚动分页控件 - 开源研究系列文章
· ShadowSql之开源不易
· 如何反向绘制出 .NET程序 异步方法调用栈
· C#多线程编程精要:从用户线程到线程池的效能进化论
· 上周热点回顾(5.5-5.11)