将 foreach 强制转换为变量类型背后的想法是什么

本文关键字:背后 是什么 类型 变量 foreach 转换 | 更新日期: 2023-09-27 17:56:21

似乎我们可以有一个正常的静态检查作业。 我不确定我是否看到这种情况的优势。 我错过了什么?

将 foreach 强制转换为变量类型背后的想法是什么

这里的问题是foreach是在泛型之前设计的,泛型在 .NET 2.0 之前并不存在。 在 .NET 1.1 中,如果使用集合类,则 IEnumerator 接口的 Current 属性始终返回 System.Object

通过让foreach做演员表,你可以写:

foreach(string item in collection)

而不必显式编写:

foreach(object temp in collection)
{
     string item = (string)temp;

当然,对于 .NET 2,这不再是真正的问题。

foreach的历史早于泛IEnumerable,因此它有助于枚举集合,例如ArrayList。 现在 .NET 具有泛型集合并且很少使用ArrayList,自由强制转换看起来确实与现在添加该功能时的设计方式有点阻抗不匹配。

尽管如此,现在我们有了这个功能,你仍然会看到人们使用它,即使是泛型集合来强制转换为他们知道他们想要的类型,从而避免了几行代码。 这与ArrayList时代的使用方式相差不远。