gpt4 book ai didi

.net - "Compatibility Pack"用于向后移植新的 .NET Framework 功能?

转载 作者:行者123 更新时间:2023-12-03 22:35:12 24 4
gpt4 key购买 nike

由于各种原因,我经常发现编写与 .NET framework 2.0 或 3.5 兼容或与 .NET Compact Framework 兼容的代码是可取的,但问题是新的 .NET 框架中有许多“小”功能在旧框架或 Compact Framework 中不可用。

例如,我发现扩展方法真的很有用,但是编译器依赖于 System.Runtime.CompilerServices.ExtensionAttribute为了这。您可以轻松地自己定义此属性,然后在 .NET Framework 2.0(在 C# 3.0+ 下)中使用扩展方法。同样,手动定义像 Tuple<T1,T2> 这样的小 .NET 4 类型并不太难。和 Lazy<T> .顺便说一句,如果你想在 .NET 2.0 中使用 LINQ,你可以使用 LinqBridge .

现在假设您制作了 ExtensionAttribute public 以便您编写的其他程序集可以使用它。一开始没问题,但是如果您想使用也有相同想法的 3rd 方库怎么办?您添加了对该库的引用,现在您遇到了名称冲突。哎呀。

我还注意到一些新库仅适用于 .NET 4.0 或 3.5,即使它们对它只有很小的依赖,可以使用兼容包或 LinqBridge 解决。

如果有旧 .NET 版本的“兼容包”,在一个小 DLL 中定义这些小功能,您可以证明将这些小功能包括在任何大小的项目中,那肯定会很好。这样的事情存在吗?

更新 : 从沉默来看,我想没有这样的事情。如果有兴趣,我可能会自己制作一个这样的OSS库。所以我的新问题是,如果您为 .NET 2、.NET 3.5、.NETCF 或 Silverlight 编写代码,您会错过 .NET 4(与 WCF/WPF 之类的怪物相反)哪些较小的功能?我将从列表开始...

  • ExtensionAttribute (不在 .NET 2 中)
  • Func<...>Action<...>代表(不在 .NET 2 中)
  • LINQ 到对象(不在 .NET 2 中)
  • Tuple<...> (不在 .NET 3.5 中)
  • Lazy<T>Lazy<T,TMetadata> (不在 .NET 3.5 中)
  • 表达式树(不在 .NET 2 中;在 .NET 3.5 中不完整)
  • 泛型差异(存在于 .NET 2 中,但无法从 C# 3 和 VB 9 访问)
  • Reflection.Emit (.NETCF 中缺少;不是一个真正的小功能,但我非常想念它)
  • 最佳答案

    Theraot 的图书馆

    您可以使用 Theraot.Core来自 Theraot's Libraries由于条件编译,将大部分 .NET 代码向后移植到从 .NET 2.0 开始的旧版本。

    在提到的功能中,包括以下功能:

  • ExtensionAttribute
  • Func<...>Action<...>代表
  • LINQ 到对象
  • Tuple<...>
  • Lazy<T>Lazy<T,TMetadata>
  • 表情长裙

  • 还包括问题中未提及的以下功能:
  • HashSet<T>
  • SortedSet<T>
  • ThreadLocal<T>
  • IObservable<T>IObserver<T>
  • BigInteger
  • ConcurrentDictionary<Tkey, TValue>
  • 等等...

  • 注意:支持 System.Threading.Tasks计划中。

    遗憾的是,在撰写本文时可用的文档很少,但与 BCL 的任何行为差异都可以被视为错误,并且可以是 reported via github .

    关于.net - "Compatibility Pack"用于向后移植新的 .NET Framework 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3462419/

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