c# - Rfc2898DeriveBytes 的版本无关代码(在 .NET 4.0 上有 Dispose 但在 2.0 上没有)

标签 c# .net dispose using

我正在编写一个使用 Rfc2898DeriveBytes 的小型 .NET 2.0 兼容程序集。在 .NET 2.0 中,Rfc2898DeriveBytes 没有实现 IDisposable,而在 .NET 4.0 中,Rfc2898DeriveBytes 实现了 IDisposable

我的程序集加载到 .NET 4.0 应用程序和 .NET 2.0 应用程序中。

我是否需要使用 .NET 4.0 Dispose Rfc2898DeriveBytes 还是可以像使用 MemoryStream 一样忽略它?如果是这样,我如何编写 .NET 2.0 和 .NET 4.0 兼容代码,仅在 .NET 4.0 上调用 Dispose? (充其量没有反射等等。)

我想不在该类上使用 Dispose 并不危险,因为 IDisposable 来自 abstract DeriveBytes -类。

最佳答案

你可以:

Rfc2898DeriveBytes rfc = null;

try
{
    var salt = new byte[128];
    rfc = new Rfc2898DeriveBytes("password", salt);
}
finally
{
    IDisposable disp = rfc as IDisposable;

    if (disp != null)
    {
        disp.Dispose();
    }
}

即使使用 Roslyn,编译器也不会删除 as IDisposable : http://goo.gl/OObkzv (右 Pane ,它已经处于 Release模式,因此优化处于事件状态)

(请注意,我并不是完全复制 using 模式...我已经在 rfc/try 内部而不是外部初始化了 finally 变量...可能没有实际差异)

关于c# - Rfc2898DeriveBytes 的版本无关代码(在 .NET 4.0 上有 Dispose 但在 2.0 上没有),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31071722/

相关文章:

.net - 存储库模式中的事务

c# - 在 C# 中处理 OpenFileDialog?

java - 如何正确使用dispose()?

c# - 我要找回我的内存!我怎样才能真正处置一个控件?

c# - XDocument 在生成最终 xml 字符串时添加回车符

c# - 在 ToDictionary 之前执行 ToList() 是否更好?

c# - 获取错误 107 (net::ERR_SSL_PROTOCOL_ERROR):SSL 协议(protocol)错误

c# - 关闭子窗体时如何刷新datagridview?

c# - 如何在字符串列表中找到重复模式?

c# - 如何强制 throw 成为语句而不是表达式(在 lambda 表达式中)?