当前位置:  开发笔记 > 后端 > 正文

最有用的.NET实用程序类开发人员倾向于重新发明而不是重用

如何解决《最有用的.NET实用程序类开发人员倾向于重新发明而不是重用》经验,为你挑选了21个好方法。

我最近从去年开始阅读这篇Phil Haack帖子(最有用的.NET实用程序类开发人员倾向于重新使用而不是重用),并且我认为我会看到是否有人对该列表有任何补充.



1> Vivek..:

人们倾向于使用丑陋且必然会失败的以下内容:

string path = basePath + "\\" + fileName;

更好更安全的方式:

string path = Path.Combine(basePath, fileName);

我也看到人们编写自定义方法来读取文件中的所有字节.这个非常方便:

byte[] fileData = File.ReadAllBytes(path); // use path from Path.Combine

正如TheXenocide指出的那样,同样适用于File.ReadAllText()File.ReadAllLines()



2> James Curran..:

String.IsNullOrEmpty()



3> Panos..:
Path.GetFileNameWithoutExtension(string path)

返回没有扩展名的指定路径字符串的文件名.

Path.GetTempFileName()

在磁盘上创建唯一命名的零字节临时文件,并返回该文件的完整路径.


该方法仍然名不副实.让我们发明方法Pa​​th.CreateTempfile(),它返回一个临时文件名但实际上并没有创建该文件.由于竞争条件,它会很糟糕,但它的名称与GetTempFileName一样完美.
_doesn't_创建文件的等效方法称为[`GetRandomFileName`](http://msdn.microsoft.com/en-us/library/system.io.path.getrandomfilename.aspx).

4> Johnno Nolan..:

System.Diagnostics.Stopwatch班.



5> RB...:

的String.Format.

我见过的次数

return "£" & iSomeValue

而不是

return String.Format ("{0:c}", iSomeValue)

或者附加百分号的人 - 这样的事情.


这不是本地化,而是用错误的数据替换正确的数据.如果是5英镑,你应该显示5英镑,而不是5英镑.5英镑不是5美元.
@Stimpy,string.Format()更适合本地化.

6> James Curran..:

Enum.Parse()


"reflection => slow"是一种荒谬的泛化和过度简化.要使用该类型,必须已将程序集加载到内存中.因此,这里使用的"反射"只是获得对现有数组的引用.你无法做得更好.
Toro,你为什么要编程.NET呢?这很慢..

7> James Curran..:

String.Join()(然而,几乎所有人都知道string.Split并且似乎每次机会都使用它......)


+1.愚蠢的是,我经常看到有人通过创建一个StringBuilder来重新发明轮子,为isFirstElement制作一个布尔值,并通过一个集合进行预处理,在除第一个元素之外的每个元素之前加上",".只需将项添加到List ,然后调用ToArray()和string.Join().

8> Peter Walke..:

试图找出我的文档在用户计算机上的位置.只需使用以下内容:

string directory =
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);


在VB.Net中:My.Computer.FileSystem.SpecialFolders.MyDocuments

9> Bobby Ortiz..:

我最近需要在Windows应用程序中下载一些文件.我在WebClient对象上找到了DownloadFile方法:

    WebClient wc = new WebClient();
    wc.DownloadFile(sourceURLAddress, destFileName);



10> John Chuckra..:

硬编码a/into目录操作字符串与使用:

IO.Path.DirectorySeparatorChar


为什么不Path.Combine并完全忽略DirectorySeparatorChar.
有些情况下我只需要这个角色

11> splattne..:

StringBuilder的类,特别是法AppendFormat.

PS:如果您正在寻找字符串操作性能测量: StringBuilder与使用.NET 2.0的字符串/快速字符串操作



12> Romain Verdi..:
Environment.NewLine



13> Ed Ball..:

不要使用Guid生成文件名,只需使用:

Path.GetRandomFileName()



14> Keith..:

很多新的Linq功能似乎都很不为人知:

Any() & All()

if( myCollection.Any( x => x.IsSomething ) )
    //...

bool allValid = myCollection.All( 
    x => x.IsValid );

ToList(), ToArray(), ToDictionary()

var newDict = myCollection.ToDictionary(
    x => x.Name,
    x => x.Value );

First(), FirstOrDefault()

return dbAccessor.GetFromTable( id ).
    FirstOrDefault();

Where()

//instead of
foreach( Type item in myCollection )
    if( item.IsValid )
         //do stuff

//you can also do
foreach( var item in myCollection.Where( x => x.IsValid ) )
    //do stuff

//note only a simple sample - the logic could be a lot more complex

您可以在Linq语法之外使用的所有非常有用的小函数.



15> Rinat Abdull..:

使用DebuggerDisplay属性而不是ToString()来简化调试.

Enumerable.Range

来自FSharp.Core的元组!



16> Galwegian..:

System.Text.RegularExpressions.Regex



17> mmacaulay..:

input.StartsWith("stuff") 代替 Regex.IsMatch(input, @"^stuff")


除了input.StartsWith()将执行大约10倍.YAGNI和KISS!

18> John Sheehan..:

请参阅隐藏的.NET基类库类



19> Joel Coehoor..:

For all it's hidden away under the Microsoft.VisualBasic namespace, TextFieldParser is actually a very nice csv parser. I see a lot of people either roll their own (badly) or use something like the nice Fast CSV library on Code Plex, not even knowing this is already baked into the framework.



20> David Basara..:

文件的东西.

using System.IO;

File.Exists(FileNamePath)

Directory.Exists(strDirPath)

File.Move(currentLocation, newLocation);

File.Delete(fileToDelete);

Directory.CreateDirectory(directory)

System.IO.FileStream file = System.IO.File.Create(fullFilePath);



21> torial..:

System.IO.File.ReadAllText vs使用StreamReader为小文件编写逻辑.

System.IO.File.WriteAllText vs使用StreamWriter为小文件编写逻辑.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有