使用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提供的代码的程序员将总是意识到他们使用非托管资源(这是正确的术语吗?),而如果他们使用我的实现,他们就不会。

还有其他想法吗?

使用using关键字的这两个实现之间的差异

这个来自msdn的示例更加通用,因为MD5类上有不同的Create过载,允许使用不同的哈希算法。

注意他们是如何使用它的:使用这个函数的人可以提供MD5类的任何实例,并且它将工作。当然,正如我在评论中所说,他们的样品通常远非完美,我不认为他们在其中投入了太多

如果您想在CreateHash范围内重用md5Hash, MSDN代码将更有效