検索

C#リストの使い方

Dec 15, 2016 pm 03:26 PM

コレクションは OOP の重要な概念であり、C# でのコレクションの包括的なサポートは言語の本質の 1 つです。

ジェネリック コレクションを使用する理由は何ですか?

C# 2.0 より前には、コレクションを実装する主な方法が 2 つありました。

a. ArrayList

を使用してオブジェクトを ArrayList に直接配置します。ただし、コレクション内の項目は Object 型であるため、面倒な型変換を実行するたびに使用されます。

b. カスタム コレクション クラスを使用する

一般的なアプローチは、CollectionBase 抽象クラスからカスタム クラスを継承し、IList オブジェクトをカプセル化することで厳密に型指定されたコレクションを実装することです。この方法では、コレクション型ごとに対応するカスタム クラスを作成する必要があり、大きなワークロードが必要になります。ジェネリック コレクションの登場により、上記の問題は 1 行のコードだけで、指定された型のコレクションを作成できるようになりました。

ジェネリック医薬品とは何ですか?

ジェネリックは C# 2.0 の新しい要素 (C++ ではテンプレートと呼ばれます) であり、主に一連の同様の問題を解決するために使用されます。このメカニズムにより、クラス名をパラメーターとしてジェネリック型に渡し、対応するオブジェクトを生成することができます。ジェネリックス (クラス、インターフェイス、メソッド、デリゲートなどを含む) をテンプレートと考えると、テンプレート内のバリアント部分がパラメーターとして渡されたクラス名に置き換えられ、それによって新しい型定義が取得されます。ジェネリックは比較的大きなトピックなので、ここでは詳しく分析しません。興味がある方は関連情報を参照してください。



汎用コレクションを作成するにはどうすればよいですか?

コレクションを作成するには、主に System.Collections.Generic 名前空間の List ジェネリック クラスを使用します。 構文は次のとおりです。

次のように Person クラスを定義します。

ご覧のとおり、ジェネリック コレクションは、コレクションの実装コードを使用すると、指定した型のコレクションを簡単に作成できます。それだけでなく、汎用コレクションはさらに強力な機能も提供します。並べ替えと検索を見てみましょう。

List ListOfT = new List();

「T」は使用する型で、string、int、またはユーザー定義型などの単純な型を指定できます。以下に具体的な例を見てみましょう。


class person

{

public person(string Name, int Age) )

this._name= 名前;

this._age = 年齢;

}

//Name

public string Name

{

get { return _name }

}

//年齢

public int Age

{g Get {Return_age;}}}} // 人物オブジェクトを作成します

人物 P1 = 新しい人物 ("Zhang San", 30);

人物 P2 = 新しい人物 ( "李思", 20);

person p3 = new person("王五", 50);

//タイプ person のオブジェクトのコレクションを作成します

List people = new List() ;

// Person オブジェクトをコレクションに入れます

persons.Add(p1);

persons.Add(p2);

persons.Add(p3);

//2 番目の人物の名前を出力します

Console.Write(persons[1].Name);

一般的なコレクションの並べ替え

並べ替えは比較に基づいて行われます。たとえば、2 つの数値 1 と 2 があります。これらを並べ替えるには、まず 2 つの数値を比較し、比較結果に基づいて並べ替える必要があります。オブジェクトを比較する場合、状況は少し複雑になります。たとえば、人物オブジェクトを比較する場合は、名前または年齢で比較できますが、これには比較ルールを決定する必要があります。オブジェクトには複数の比較ルールを含めることができますが、オブジェクトを定義するクラスに配置されるデフォルト ルールは 1 つだけです。デフォルトの比較ルールは、IComparable 汎用インターフェイスに属する CompareTo メソッドで定義されます。次のコードを参照してください: lClass Person: iComparable & LT; Person & GT; }

}

CompareTo メソッドのパラメータは比較対象となる同じ型の別のオブジェクトであり、戻り値は int 型です。戻り値が 0 より大きい場合は、最初のオブジェクトが 2 番目のオブジェクトより大きいことを意味します。戻り値が 0 より小さい場合は、1 番目のオブジェクトが 2 番目のオブジェクトより小さいことを意味します。等しい。

デフォルトの比較ルールを定義した後、以下に示すように、パラメータを指定せずに Sort メソッドを使用してコレクションを並べ替えることができます:

// デフォルトのルールに従ってコレクションを並べ替えます

persons.Sort();

//すべての人物の名前を出力します

foreach (人名p)

{

Console.WriteLine(p.Name) //出力順は「李思」、「张三」、「王」です。五"

}

実際の使用では、多くの異なるルールに従ってコレクションを並べ替える必要があることがよくあります。これには、Compare メソッドで定義できる他の比較ルールを定義する必要があります。このメソッドは IComparer 汎用インターフェイスに属します。以下を参照してください。 コード:

class NameComparer: IComparer

{

//ストレージ ソーター インスタンス

public static NameComparer Default = new NameComparer();

//名前で比較

public int Compare (人物 p1、人物 p2)

. Name); の場合、戻り値は int 型であり、戻り値の処理規則はCompareTo メソッド。その中の Comparer.Default は、同じ型の 2 つのオブジェクトを比較するための組み込みの Comparer オブジェクトを返します。

次に、新しく定義したコンパレータを使用してコレクションを並べ替えます。

委任によってコレクションを並べ替えることもできます。まず、比較ルールを保存するために委任が呼び出すメソッドを定義する必要があります。以下のコードを見てください: 次に、組み込みの汎用デリゲート System.Comparison を使用してコレクションを並べ替えます:

ご覧のとおり、後の 2 つのメソッドは指定されたルールに従ってコレクションを並べ替えることができますが、作成者はこの方法を好みます。デリゲーション方式では、さまざまな比較ルールをクラスに入れて柔軟に呼び出すことが考えられます。

//コレクションを名前で並べ替えます

persons.Sort(NameComparer.Default);

//全員の名前を出力します

foreach (person p in people)

{

Console.WriteLine(p.Name ;

) {

return System.Collections.Comparer.Default.Compare(p1.Name, p2.Name); 型、戻り値の処理規則は CompareTo メソッドと同じです。

System.Comparison NameComparison = new System.Comparison(PersonComparison.Name);

persons.Sort(NameComparison);

//全員の名前を出力します

foreach (人名p)

{

Console.WriteLine(p.Name); //出力順序は "Li Si"、"Wang Wu"、"Zhang San" です

}

ご覧のとおり、後者の 2 つのメソッドは次の目的で使用できます。 「ソートのルールを指定する」に従ってコレクションを設定しますが、作成者は委任を使用することを好みます。さまざまな比較ルールをクラスに入れて、それらを柔軟に呼び出すことを検討できます。

一般的なコレクションの検索

検索とは、コレクションから特定の条件を満たすアイテムを検索することです。複数の検索条件を定義し、必要に応じて呼び出すことができます。まず、検索条件を次のように定義します。

class PersonPredicate

{

//中年(40歳以上)を探す

public static bool MidAge(person p)

{

if (p. 年齢 > 特定を満たす 条件の項目は true を返し、それ以外の場合は false を返します。

System.Predicate MidAgePredicate = new System.Predicate(personPredicate.MidAge);

List MidAgepersons = people.FindAll(MidAgePredicate);

//中年全員の名前を出力しますpeople

foreach (person p in MidAgepersons)

{

Console.WriteLine(p.Name); //Output "王五"

} 次に、組み込みの汎用デリゲート System.Predicate

ジェネリック コレクションの拡張

コレクション内のすべての人の名前をカンマで区切って取得したい場合、どうすればよいでしょうか?

単一のクラスが提供できる機能には制限があることを考慮すると、List クラスもクラスなので、継承によって拡張することを考えるのが自然です。以下のコードを見てください:

// Persons コレクション クラスを定義します

class Persons: List

{

// コレクション内のすべての人の名前を取得します

public string GetAllNames( )

{

this.Count == 0)

;

}

return val.Substring( 0、val.Length - 1);

}

}

// Persons コレクションを作成してデータを設定します

Persons PersonCol = new Persons();

PersonCol.Add(p1);

PersonCol.Add(p2);

PersonCol.Add(p3);

//Output全員の名前

Console.Write(PersonCol.GetAllNames()); //出力「Zhang San, Li Si, Wang Wu 」

List メソッドまたは属性関数のメソッドと属性

Capacity は数値を取得または設定するために使用されますリストが収容できる要素の数。数量が容量を超えると、この値は自動的に増加します。この値を設定して容量を減らすか、trin() メソッドを呼び出して実際の要素数に合わせて容量を減らすことができます。

Count プロパティ。配列内の現在の要素数を取得するために使用されます。

Item() インデックスを指定して要素を取得または設定します。 List クラスの場合、これはインデクサーです。

Add( ) List にオブジェクトを追加するパブリック メソッド

AddRange( ) List の最後に ICollection インターフェイスを実装する複数の要素を追加するパブリック メソッド

BinarySearch( ) 並べ替えに使用されるオーバーロードされたパブリック メソッド バイナリを使用リスト内の指定された要素を検索します。

Clear( ) リストからすべての要素を削除します。

Contains( ) 要素がリスト内にあるかどうかをテストします。

CopyTo( ) オーバーロードされたパブリック メソッド、リストを 1 つにコピーします。 -次元配列

Exists()は、要素がList内にあるかどうかをテストします

Find()は、List内に表示される最初に一致する要素を検索して返します

FindAll()は、List内で一致するすべての要素を検索して返します

GetEnumerator () オーバーロードされたパブリック メソッド、反復のための列挙子を返します List

Getrange() 指定された範囲内の要素を新しい List

IndexOf() オーバーロードされたパブリック メソッド、それぞれを検索して返します 一致する要素のインデックス

Insert () List に要素を挿入します

InsertRange() List に要素のセットを挿入します

LastIndexOf() オーバーロードされた public メソッドで、最後に一致した要素のインデックスを検索して返します

Remove() は最初に一致した要素を削除します指定された要素と一致します

RemoveAt( ) 指定されたインデックスにある要素を削除します

RemoveRange( ) 指定された範囲内の要素を削除します

Reverse( ) リスト内の要素の順序を逆にします

Sort() 要素を並べ替えますList 内の要素

ToArray() List 内の要素を新しい配列にコピーします

trimToSize() List 内の実際の要素数に容量を設定します

概要:

この記事では、Yu の使用法を紹介することに焦点を当てます。 C# 2.0 のジェネリックを使用してコレクションを実装し、コレクション関数を拡張すると、多くの反復作業が軽減され、開発効率が大幅に向上します。実際、コレクションはジェネリックの典型的なアプリケーションにすぎません。ジェネリックについて詳しく知りたい場合は、他の関連情報を確認してください。この記事がお役に立てば幸いです

C# リストの使用方法に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
.NET内のC#コード:プログラミングプロセスの調査.NET内のC#コード:プログラミングプロセスの調査Apr 12, 2025 am 12:02 AM

.NETでのC#のプログラミングプロセスには、次の手順が含まれます。1)C#コードの作成、2)中間言語(IL)にコンパイルし、3).NETランタイム(CLR)によって実行される。 .NETのC#の利点は、デスクトップアプリケーションからWebサービスまでのさまざまな開発シナリオに適した、最新の構文、強力なタイプシステム、および.NETフレームワークとの緊密な統合です。

C#.NET:コアの概念とプログラミングの基礎を探るC#.NET:コアの概念とプログラミングの基礎を探るApr 10, 2025 am 09:32 AM

C#は、Microsoftによって開発された最新のオブジェクト指向プログラミング言語であり、.NETフレームワークの一部として開発されています。 1.C#は、カプセル化、継承、多型を含むオブジェクト指向プログラミング(OOP)をサポートしています。 2。C#の非同期プログラミングは非同期を通じて実装され、適用応答性を向上させるためにキーワードを待ちます。 3. LINQを使用してデータ収集を簡潔に処理します。 4.一般的なエラーには、null参照の例外と、範囲外の例外インデックスが含まれます。デバッグスキルには、デバッガーと例外処理の使用が含まれます。 5.パフォーマンスの最適化には、StringBuilderの使用と、不必要な梱包とボクシングの回避が含まれます。

テストC#.NETアプリケーション:ユニット、統合、およびエンドツーエンドテストテストC#.NETアプリケーション:ユニット、統合、およびエンドツーエンドテストApr 09, 2025 am 12:04 AM

C#.NETアプリケーションのテスト戦略には、ユニットテスト、統合テスト、エンドツーエンドテストが含まれます。 1.単位テストにより、コードの最小ユニットがMSTEST、ヌニット、またはXUNITフレームワークを使用して独立して動作することを保証します。 2。統合テストでは、一般的に使用されるシミュレートされたデータと外部サービスを組み合わせた複数のユニットの機能を検証します。 3.エンドツーエンドのテストでは、ユーザーの完全な操作プロセスをシミュレートし、通常、セレンは自動テストに使用されます。

高度なC#.NETチュートリアル:次のシニア開発者インタビューをエース高度なC#.NETチュートリアル:次のシニア開発者インタビューをエースApr 08, 2025 am 12:06 AM

C#シニア開発者とのインタビューでは、非同期プログラミング、LINQ、.NETフレームワークの内部作業原則などのコア知識をマスターする必要があります。 1.非同期プログラミングは、非同期を通じて操作を簡素化し、アプリケーションの応答性を向上させるのを待ちます。 2.LinqはSQLスタイルでデータを操作し、パフォーマンスに注意を払います。 3.ネットフレームワークのCLRはメモリを管理し、ガベージコレクションに注意して使用する必要があります。

c#.netインタビューの質問と回答:専門知識を高めるc#.netインタビューの質問と回答:専門知識を高めるApr 07, 2025 am 12:01 AM

C#.NETインタビューの質問と回答には、基本的な知識、コアの概念、高度な使用が含まれます。 1)基本知識:C#は、Microsoftが開発したオブジェクト指向言語であり、主に.NETフレームワークで使用されています。 2)コアの概念:委任とイベントは動的な結合方法を可能にし、LINQは強力なクエリ関数を提供します。 3)高度な使用:非同期プログラミングは応答性を向上させ、式ツリーは動的コード構造に使用されます。

C#.NETを使用したマイクロサービスの構築:建築家向けの実用的なガイドC#.NETを使用したマイクロサービスの構築:建築家向けの実用的なガイドApr 06, 2025 am 12:08 AM

C#.NETは、その強力なエコシステムと豊富なサポートのため、マイクロサービスを構築するために人気のある選択肢です。 1)asp.netcoreを使用してRestfulapiを作成して、順序の作成とクエリを処理します。 2)GRPCを使用して、マイクロサービス間の効率的な通信を実現し、注文サービスを定義および実装します。 3)Dockerコンテナ化されたマイクロサービスを介して展開と管理を簡素化します。

C#.NETセキュリティベストプラクティス:一般的な脆弱性の防止C#.NETセキュリティベストプラクティス:一般的な脆弱性の防止Apr 05, 2025 am 12:01 AM

C#および.NETのセキュリティベストプラクティスには、入力検証、出力エンコード、例外処理、認証と承認が含まれます。 1)正規表現または組み込みのメソッドを使用して入力を検証して、悪意のあるデータがシステムに入るのを防ぎます。 2)XSS攻撃を防ぐための出力エンコード、httputility.htmlencodeメソッドを使用します。 3)例外処理により、情報の漏れが回避され、エラーが記録されますが、詳細情報はユーザーに返されません。 4)ASP.Netidentityおよび請求に基づく許可を使用して、不正アクセスから申請を保護します。

C言語で:それはどういう意味ですかC言語で:それはどういう意味ですかApr 03, 2025 pm 07:24 PM

C言語におけるコロン( ':')の意味:条件付きステートメント:条件付き式とステートメントの分離ブロックループステートメント:初期化、条件付きおよび増分式のマクロ定義の分離:マクロ名とマクロ値の分離単一行コメント:コメントアレイの寸法としてのコロンから行までのコンテンツを表す:アレイの寸法を指定する

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境