ホームページ >バックエンド開発 >C++ >コレクションでインデックスをサポートして共分散を実現するにはどうすればよいですか?

コレクションでインデックスをサポートして共分散を実現するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-28 19:04:15149ブラウズ

How Can I Achieve Covariance with Index Support in Collections?

インデックスのサポートによるコレクションの共分散

コレクションの共分散により、基本型に対して宣言されたコレクションに派生項目を格納できます。ただし、デフォルトの共変コレクション IEnumerable にはインデックスのサポートがありません。

質問者が指摘しているように、List のアップキャストは、 IListへ元の List では許可されていない、犬以外の動物の追加を許可する可能性があります。 collection.

考えられる解決策

.NET 4.5 以降、IReadOnlyListおよび IReadOnlyCollection共変動作とインデックス検索の両方を提供します。ただし、これらは読み取り専用です。

共変ラッパーの作成

インデックスをサポートする書き込み可能なコレクションが必要な場合は、IList< をラップする拡張メソッドを作成できます。 ;T>そして、必要な共分散を提供するメソッドのサブセットのみを公開します:

public static class Covariance
{
    public static IIndexedEnumerable<T> AsCovariant<T>(this IList<T> tail)
    {
        return new CovariantList<T>(tail);
    }
    private class CovariantList<T> : IIndexedEnumerable<T>
    {
        // Implementation...
    }
}

このラッパー クラス CovariantList は、インデクサーとカウント プロパティを提供する IIndexedEnumerable を実装します。

AsCovariant() を呼び出すことにより、 IList を使用すると、インデックス サポートを備えた共変コレクションを取得できるため、指定された基本型を維持しながら派生アイテムを取得して反復処理できるようになります。

以上がコレクションでインデックスをサポートして共分散を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。