gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:56:55 25 4
gpt4 key购买 nike

我正在编写一个使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com