1

この質問への回答を投稿しました。最後に、String.Split() が string[] ではなく IEnumerable<string> を受け入れる方法についての非常に短い暴言を含めます。

それは私に考えさせました。他のすべてが継承する基本 Object クラスが IEnumerable の既定の実装を提供し、コレクション クラスなどで何か他のことを行うためにオーバーライドされない限り、すべてが正確に 1 つのアイテム (それ自体) に対して 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>のコントラクトの一部ではありません リフレクターでコードを確認した後、コードは常に配列の一部であるインデックス演算子を多用します。

簡単に言えば、配列には常に列挙子があります。

アイデアは、String.Split()のようなメソッドが配列ではなくIEnumerableを受け入れる場合、単一の文字列を関数に渡すことができ、セパレーター配列の作成に多くのことをする必要はなく、それが機能するということです。

そうではありません。文字列はIEnumerable<char>を継承します。また、一般的な差異がないため、IEnumerable<char>をIEnumerable<string>にキャストすることはできません。必要な文字列ではなく、IEnumerable<char>バージョンのsplitを取得します。

于 2008-09-30T20:26:02.357 に答える
0

ヘルパー オブジェクトを使用して、IEnumerable クラスに Split を実装することを考えたことはありますか?

DescriptionAttribute を簡単に取得するために、Enum クラスの GetDescription を作成しました。それは驚くほどうまく機能します。

于 2008-09-30T20:28:20.400 に答える