使用using-keyword在这两个实现之间存在差异

时间:2013-03-03 14:56:25

标签: c# using unmanagedresources

仅举一个创建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提供的代码,总是意识到他们使用非托管资源这一事实(这是正确的术语吗?) ,如果他们使用我的实施,他们就不会。

还有其他想法吗?

2 个答案:

答案 0 :(得分:2)

如果您想重用md5Hash

范围内的CreateHash,MSDN代码会更有效率

答案 1 :(得分:2)

来自msdn的

This示例更具通用性,因为Create类上有MD5的不同重载,允许使用不同的散列算法。

注意他们如何使用它:使用此函数的任何人都可以提供MD5类的任何实例,它将起作用。当然,正如我在评论中所说的那样,他们的样本通常远非完美,我不会想太多但是已经把它放进去了