4

今天我发现了一件让我伤心的事情:System.Generic.Collections.List 类型的对象没有很多我喜欢的有用的扩展方法,例如 Find、FindAll、FindIndex、Exists、RemoveAll 等.

VS2008 中的对象浏览器显示这些方法存在于我正在使用的 mscorlib 版本中,但如果我查看 ildasm 中的程序集,它们不存在。

我是否在这里遗漏了一些明显的东西,或者有什么方法可以让我的 Silverlight 应用程序使用它们?

另外,我想知道 Silverlight 的运行时与“真实”运行时之间是否有很好的参考。

谢谢!

4

5 回答 5

5

这里可能发生的是对象浏览器正在解析为普通的 2.0 mscorlib,而不是用于 silverlight 的版本。

SilverLight 应用程序缺少 Find 扩展方法并不奇怪。SilverLight 的 .Net 框架被剥离了很多,以使其足够小,以便用户快速下载。他们不得不进行一些艰难的削减,许多项目没有成功。

如果您需要该方法,为什么不自己添加呢?添加所有这些可能会在一段时间后变得很累,但它可以用来解决这个问题。

于 2008-12-03T18:43:55.510 回答
1

只是一个要点:Find不是扩展方法。这是一个完全正常的实例方法。

List<T>然而, Silverlight中有些“遗漏”的部分并不完全让我感到惊讶。它框架的精简版。不幸的是,我不知道有什么资源可以说明什么进什么出。

于 2008-12-03T18:56:57.417 回答
1

这是一场持久战,兄弟。我将我的 .Net API 和 Silverlight API 书签放在一起,因为我开发了很多 WPF 和 Silverlight 中使用的控件,而且似乎每次我想出一个实现功能的好主意时,我都会运行进入 Silverlight 不支持的基本内容。

我可以看到会议讨论什么得到印章。“我们需要这个 find() 方法做什么?我们有一个非常好的 LINQ 库。不见了!”

Silverlight 参考

于 2008-12-03T19:09:20.187 回答
1

.Exists 仍然不存在作为 silverlight 版本中的扩展名

于 2009-06-29T11:34:00.923 回答
0

如果您还没有引用 System.Core 程序集并执行

using System.Linq;

对于任何 IEnumerable,您将拥有许多扩展方法,可以做您需要的东西等等。

Microsoft 显然希望将 Silverlight 运行时保持在较小的下载范围内,从而避免重复实现。

原始框架中的许多东西在泛型和 .NET 2.0 中已经过时,在 .NET 3.0 和扩展方法中更多。我想你在 Silverlight 中找到的东西很好地暗示了未来的方向。他们遗漏的东西(比如 System.ComponentModel 中的很多东西)也将在原始框架中被弃用(当然除了服务器/数据库的东西)。

于 2009-06-23T14:37:15.170 回答