2008-09-30 30 views
1

我发布了一个对this question的回答,其中包括关于String.Split()应该如何接受IEnumerable字符串>而不是字符串[]的结尾的非常短暂的咆哮。从对象结果继承IEnumerable

这让我思考。如果从其他所有东西继承的基类Object类提供了IEnumerable的默认实现,那么现在所有东西都只返回一个Enumerator到一个项目(本身) - 除非重写了其他类似于集合类的东西。

这个想法是,然后如果像String.Split()方法确实接受IEnumerable而不是数组我可以传递一个单一的字符串到函数,它只会工作,而不是有很多关于创建一个分隔符数组。

我确定有各种各样的原因不这样做,其中最重要的是,如果一切都实现了IEnumerable,那么实现在默认情况下执行的几个类可能会表现出与您预期不同的行为在某些情况下。但我仍然认为这将是一个有趣的练习:会有什么其他的后果?

+0

我不知道该不该拆我的答案... – MagicKat 2008-09-30 20:54:50

回答

0

索引操作符([])不是IEnumerable的<Ť> 合同看着反射器中的代码后的一部分,代码使用索引操作符重,这始终是阵列的一部分。

好吧,简单地说,Array将始终有一个枚举器。

的想法是,那么如果像String.Split()的方法确实接受了IEnumerable,而不是一个数组我可以在一个字符串传递给函数,它只会工作,而不必太多关于与创建分隔符数组。

这是不正确,串继承IEnumerable的<焦炭>而你没有通用的差异,所以你不能投IEnumerable的<焦炭>到IEnumerable的<串>。您将获得IEnumerable <char>版本的拆分,而不是所需的字符串。

+0

不过,我更喜欢它,如果接受的string.join IEnumerable的,而不是字符串[]作为现在的情况。 – 2008-09-30 20:36:33

0

你有没有想过使用助手对象并实现IEnumerable类的拆分?

我曾经为Enum类做过GetDescription,所以很容易得到DescriptionAttribute。它工作得非常好。

2
public static IEnumerable<object> ToEnumerable(this object someObject) 
{ 
    return System.Linq.Enumerable.Repeat(someObject, 1); 
}