1

我发布了对这个问题的回答,包括最后关于 String.Split() 应该如何接受 IEnumerable<string> 而不是 string[] 的简短咆哮。

这让我思考。如果继承其他所有内容的基 Object 类为 IEnumerable 提供了一个默认实现,这样现在所有内容都返回一个 Enumerator 仅针对一个项目(本身)——除非它被覆盖以执行其他操作,如集合类。

这个想法是,如果像 String.Split() 这样的方法确实接受 IEnumerable 而不是数组,我可以将单个字符串传递给函数,它就可以工作,而不必过多地创建分隔符数组。

我敢肯定有各种各样的理由不这样做,其中最重要的一点是,如果所有东西都实现了 IEnumerable,那么在某些情况下,实现偏离默认值的少数类的行为可能与您预期的不同。但我仍然认为这将是一个有趣的练习:会有什么其他后果?

4

3 回答 3

2
public static IEnumerable<object> ToEnumerable(this object someObject)
{
    return System.Linq.Enumerable.Repeat(someObject, 1);
}
于 2008-09-30T20:32:23.573 回答
0

索引运算符 ([]) 不是 IEnumerable<T> 契约的一部分 查看反射器中的代码后,代码大量使用索引运算符,它始终是 Array 的一部分。

好吧,简单地说,Array 总是有一个枚举器。

这个想法是,如果像 String.Split() 这样的方法确实接受 IEnumerable 而不是数组,我可以将单个字符串传递给函数,它就可以工作,而不必过多地创建分隔符数组。

这不是真的,字符串继承了 IEnumerable<char> 而且你没有泛型变量,所以你不能将 IEnumerable<char> 转换为 IEnumerable<string>。您将获得拆分的 IEnumerable<char> 版本,而不是所需的字符串。

于 2008-09-30T20:26:02.357 回答
0

您是否考虑过使用辅助对象并为 IEnumerable 类实现拆分?

我曾经为 Enum 类制作了一个 GetDescription,以便轻松获取 DescriptionAttribute。它工作得非常好。

于 2008-09-30T20:28:20.400 回答