我发布了this question的答案,包括最后一篇关于String.Split()应该如何接受IEnumerable< string>的咆哮。而不是字符串[]。
这让我思考。如果其他所有内容继承的基类Object为IEnumerable提供了一个默认实现,那么现在所有内容都会在一个项目(本身)上返回一个Enumerator,除非它被覆盖以执行其他类似于集合类的操作。
这个想法是,如果像String.Split()这样的方法确实接受IEnumerable而不是数组,我可以将一个字符串传递给该函数,它只会工作,而不是在创建一个分隔符数组时需要做多少工作。
我敢肯定有各种各样的理由不这样做,其中最重要的是如果所有内容都实现了IEnumerable,那么实现偏离默认值的几个类的行为可能与你期望的不同。某些情况。但我仍然认为这将是一个有趣的练习:会有什么其他后果?
答案 0 :(得分:2)
public static IEnumerable<object> ToEnumerable(this object someObject)
{
return System.Linq.Enumerable.Repeat(someObject, 1);
}
答案 1 :(得分:0)
索引运算符([])不是IEnumerable&lt; T&gt; 合约的一部分 在查看反射器中的代码之后,代码会大量使用索引运算符,它始终是Array的一部分。
嗯,简单地说,Array总是有一个枚举器。
这个想法是,如果像String.Split()这样的方法确实接受IEnumerable而不是数组,我可以将一个字符串传递给该函数,它只会工作,而不是在创建一个分隔符数组时需要做多少工作。
不是这样,字符串继承IEnumerable&lt; char&gt;并且您没有泛型方差,因此您无法转换IEnumerable&lt; char&gt;到IEnumerable&lt; string&gt;。您将获得IEnumerable&lt; char&gt; split的版本,而不是所需的字符串。
答案 2 :(得分:0)
您是否考虑过使用辅助对象并为IEnumerable类实现Split?
我曾经为Enum类创建了一个GetDescription,以便轻松获取DescriptionAttribute。它的效果非常好。