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

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

还有其他想法吗?

最佳答案

This来自 msdn 的示例更通用一些,因为 MD5 类上有不同的 Create 重载,允许使用不同的哈希算法。

注意他们是如何使用它的:使用这个函数的人可以提供 MD5 类的任何实例,并且它会起作用。当然,正如我在评论中所说,他们的 sample 通常远非完美,虽然已经放入其中,但我并没有想太多

关于c# - 这两个使用 using 关键字的实现之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15186945/

相关文章:

c# - 是否应将 Marshal.FreeHGlobal 放在 finally block 中以确保资源得到处理?

C# 获取非托管 dll 的版本

c# - 在不锁定资源的情况下使用 BitMap 对象

c# - OpenCV圆圈检测C#实现

c# - 具有状态构造函数参数的 Akka .NET 中的依赖注入(inject)

c++ - 可以使用 using 为数组键入别名吗?

c# - 将代码重构为 using 语句

c# - GC.KeepAlive 保留上下文

c# - 代码找不到塞尔维亚语资源

c# - PredicateBuilder 剥离括号,打破嵌套的 AND 与 OR 的组合