在做代码审核的时候,发现有一同事写了这样的代码.出现这种代码只能说明工作压力山大, 都不思考了.
不需要注释也能看明白,意思就是想获取一个唯一的临时文件,用了 Path.GetRandomFileName() 得到一个随机文件名,并且用 Path.GetTempPath() 得到临时文件夹.问题是他觉得这样不保险,于是就不停的尝试,如果文件存在的话,就试着下一个随机的文件名,直到不重复(或者最大尝试 100 次), 看到这里, 真是醉了.
另一个小问题就是,这个 while 还每次判断 文件名是否为空,这个只有在第一次判断的时候才为空,之后都不可能为空的,这样的代码质量真的很低.
C# (.NET) 里 Path.GetTempFileName() 创建一个临时文件,并返回这个文件名.创建文件名的好处是这样就能确定该文件是唯一的, 因为其它进程在执行这个函数的时候如果文件名存在,则会获取下一个临时文件名并创建.每次都能保证唯一,而不会出现多个进程获取得到同样的文件名.
该程序员想的是,获取一个文件名(并不着急创建),之后再创建,感觉就是脱裤子放屁,多此一举,因为获取临时文件名就是肯定要创建该文件的,不创建的话获取文件名干什么?
代码审核很重要,因为这段代码平常来说是不会出问题的,但是效率实在不敢恭唯.
实际上,上面的代码完全可以替换成下面的代码(不会创建文件名), 这样的结合会更加实用些 (而且更简便, 高效)
1 2 3 4 | public static string GetTempFileName() { return Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); } |
public static string GetTempFileName() { return Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); }
英文同步: https://helloacm.com/code-review-gettempfilename-in-c/
强烈推荐
- 英国代购-畅购英伦
- TopCashBack 返现 (英国购物必备, 积少成多, 我2年来一共得了3000多英镑)
- Quidco 返现 (也是很不错的英国返现网站, 返现率高)
- 注册就送10美元, 免费使用2个月的 DigitalOcean 云主机(性价比超高, 每月只需5美元)
- 注册就送10美元, 免费使用4个月的 Vultr 云主机(性价比超高, 每月只需2.5美元)
- 注册就送10美元, 免费使用2个月的 阿里 云主机(性价比超高, 每月只需4.5美元)
- 注册就送20美元, 免费使用4个月的 Linode 云主机(性价比超高, 每月只需5美元) (折扣码: PodCastInit2022)
- PlusNet 英国光纤(超快, 超划算! 用户名 doctorlai)
- 刷了美国运通信用卡一年得到的积分 换了 485英镑
- 注册就送50英镑 – 英国最便宜最划算的电气提供商
- 能把比特币莱特币变现的银行卡! 不需要手续费就可以把虚拟货币法币兑换
微信公众号: 小赖子的英国生活和资讯 JustYYUK