开发者经常重新发明而不是重用的.NET工具类

 

开发者经常重新发明而不是重用的.NET工具类

English Link:
http://haacked.com/archive/2007/06/13/the-most-useful-.net-utility-classes-developers-tend-to-reinvent.aspx

中文翻译:jupter@yeah.net        2008-4-13

 

1.       System.IO.Path

你是不是经常看见这样的代码?而它只是创建了一个文件路径。

public string GetFullPath(string fileName)
  
  
{
  
  
  string folder = ConfigurationManager.AppSettings["somefolder"];
  
  
  return folder + fileName;
  
  
}
  
  

像这样的代码令人发疯,因为它很容易出错。例如,当你设置文件夹路径时,你不得不确信它的结尾有一个斜杆(slash)。有太多需要记住的事情使得这段代码非常脆弱。

当然,你可以编写代码以确保这个文件夹以斜杆结束,但是我更喜欢让其它人编写这样的代码。例如,微软。

.NET框架无疑非常庞大,因此忘记了一些有用的工具类可以理解。

public string GetFullPath(string filename)
  
  
{
  
  
  string folder = ConfigurationManager.AppSettings["somefolder"];
  
  
  return System.IO.Path.Combine(folder, filename);
  
  
}
  
  

Path类当然很有名,但是开发者似乎没有让它发挥全部功能。例如,你是不是经常看到这样的代码?

//make sure folder path ends with slash
  
  
string folder = GetFolderPath() + @"/";
  
  

当然对于按照Windows的机器来说,这没有问题,但是世界在变化,或许某一天你困难想让你的代码运行在Linux或者Mac上!相反,你应该这样编码,它更安全。

string folder = GetFolderPath() + Path.DirectorySeparatorChar;
  
  

2.       System.Web.VirtualPathUtility

不知道这个类是可以原谅的,因为它是在.NET2.0中引入的。但是现在你应该记住它。它的一个最大的用途是将波浪线路径转换为绝对路径。

注意:波浪线(~)字符在ASP.NET虚拟URLs环境下称为root operator。这个字符对你非常重要。

例如,如果你想在一个名字为“MyApp”的虚拟应用程序中运行一个应用,下面的语句:

string path = VirtualPathUtility.ToAbsolutePath("~/Controls/Test.ascx");
  
  

将路径设置为/MyApp/Controls/Test.ascx。不需要编写你自己的ResolveUrl方法。

其它一些有用的方法(还有很多)

AppendTrailingSlash

Appends a / to the end of the path if none exists already.

Combine

Analagous to Path.Combine, but for URLs.

MakeRelative

Useful for getting the relative path from one directory to another (was it dot dot slash dot dot slash? Or just dot dot slash?)

3.       System.Web.HttpUtility

这个类有一个有用的方法编码和解码URL/HTML。一个小的示例

HtmlEncode

Converts a string to an HTML encoded string.

HtmlDecode

Decodes an HTML encoded string.

UrlEncode

Converts a string to a URL encoded string.

UrlDecode

Decodes a URL encoded string.

这个类有一个很特别的方法HtmlAttributeEncode。这个方法是HtmlEncode方法的lazy cousin。它只做最少的工作以安全的为将HTML编码为一个字符串。例如,下面这个字符串:

<p>&</p>

HtmlEncode输出:&lt;p&gt;&amp;&lt;/p&gt;

然而HtmlAttributeEncode输出&lt;p>&amp;&lt;/p>

也就是说,它仅仅编码左尖括号,而不编码右尖括号。

4.       System.Environment

这个类包含当前环境的各种信息。你可以获取MachineNameCommandLine,等。

然而,我希望开发者使用的一个属性是:

//Instead of this
  
  
string s = "Blah/r/n";
  
  
//do this
  
  
string s = "Blah" + Environment.NewLine;
  
  

再一次,某天,当你的代码需要运行在一个不同的操作系统上时,这可能会导致失败。从现在开始养成好的习惯吧。

5.       What Classes Am I Missing?

No matter how hard I can try, there is no way that I could make a complete list. In .NET 3.0, I’d probably add the new TimeZoneInfo class. What classes do you find extremely useful that are not so well known? Or worse, what classes have functionality that you see developers reinventing the wheel recreating, rather than using the existing class?

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值