仅作为创建 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);
}
}
我的代码
我认为更改 Microsoft 提供的代码,将使辅助方法的可重用性变得更容易:
// 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 提供的代码的程序员总是会意识到他们使用非托管资源这一事实(这是正确的术语吗?) ,而如果他们使用我的实现则不会。
还有其他想法吗?
最佳答案
This来自 msdn 的示例更通用一些,因为 MD5
类上有不同的 Create
重载,允许使用不同的哈希算法。
注意他们是如何使用它的:使用这个函数的人可以提供 MD5 类的任何实例,并且它会起作用。当然,正如我在评论中所说,他们的 sample 通常远非完美,虽然已经放入其中,但我并没有想太多
关于c# - 这两个使用 using 关键字的实现之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15186945/