使用using关键字的这两个实现之间的差异
本文关键字:实现 两个 之间 关键字 using 使用 | 更新日期: 2023-09-27 18:01:51
仅作为创建MD5散列的示例,microsoft提供了以下代码示例:
MSDN代码// in Helpers class
public static string GetMd5Hash(MD5 md5Hash, string input)
{
byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
return sBuilder.ToString();
}
,这样使用
public string CreateHash(string str)
{
using (var md5Hash = MD5.Create())
{
return Helpers.GetMd5Hash(md5Hash, str);
}
}
我的代码我认为更改微软提供的代码,将使helper方法的可重用性更容易:
// in Helpers class
public static string GetMd5Hash(string input)
{
using (var md5Hash = MD5.Create())
{
byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
return sBuilder.ToString();
}
}
所以重用它会产生更少的代码行:
public string CreateHash(string str)
{
return Helpers.GetMd5Hash(str);
}
不像我在第二个例子中那样做的目的是什么?我最初的想法是,使用MSDN提供的代码的程序员将总是意识到他们使用非托管资源(这是正确的术语吗?),而如果他们使用我的实现,他们就不会。
还有其他想法吗?
这个来自msdn的示例更加通用,因为MD5
类上有不同的Create
过载,允许使用不同的哈希算法。
注意他们是如何使用它的:使用这个函数的人可以提供MD5类的任何实例,并且它将工作。当然,正如我在评论中所说,他们的样品通常远非完美,我不认为他们在其中投入了太多
如果您想在CreateHash
范围内重用md5Hash
, MSDN代码将更有效