.NET ヘルプ

C# Dictionary TryGetValue(開発者のための動作方法)

C#は、多くの機能を提供する汎用性が高く強力な言語です。 その中にはC# Dictionary(C#辞書)があります。

C# Dictionaryの基本を理解する

TryGetValue メソッドに飛び込む前に、C#におけるDictionaryが何であるかを理解することが重要です。 簡単に言うと、ディクショナリーはキーと値のペアを集めたものです。 例えば、キーが学生の名前(文字列値)であり、値がそれに対応する年齢(整数値)である辞書を持っているかもしれません。


    Dictionary<string, int> studentAges = new Dictionary<string, int>
    {
        {"Alice", 20},
        {"Bob", 22},
        {"Charlie", 19}
    };

    Dictionary<string, int> studentAges = new Dictionary<string, int>
    {
        {"Alice", 20},
        {"Bob", 22},
        {"Charlie", 19}
    };
Dim studentAges As New Dictionary(Of String, Integer) From {
	{"Alice", 20},
	{"Bob", 22},
	{"Charlie", 19}
}
$vbLabelText   $csharpLabel

辞書のキーは一意です。 辞書では、対応する値を取得するためのキーにアクセスすることができるため、検索機能に非常に効率的です。

従来のアプローチ:ContainsKeyメソッド

C#の辞書を使用するとき、一般的な作業は特定のキーに関連付けられた値を取得することです。 しかし、存在しないキーに直接アクセスすると、プログラムのフローを中断するKeyNotFoundExceptionが発生する可能性があります。 これを避けるために、指定されたキーが辞書内に存在するかどうかを確認することが一般的です。 ここでContainsKeyメソッドが役立ちます。

ContainsKey メソッドは、Dictionary に特定のキーが存在するかどうかを確認するための単純で直感的な関数です。 以下はContainsKeyメソッドの基本構文です:

Dictionary<TKey, TValue>.ContainsKey(TKey key)
Dictionary<TKey, TValue>.ContainsKey(TKey key)
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Dictionary<TKey, TValue>.ContainsKey(TKey key)
$vbLabelText   $csharpLabel

それはキーをパラメータとして取り、Boolean値を返します。 キーが辞書にある場合、trueが返されます。 そうでない場合、false を返します。

学生の名前をキーとして、それに対応する年齢を値として持つ辞書の例を以下に示します。

Dictionary<string, int> studentAges = new Dictionary<string, int>
{
    {"Alice", 20},
    {"Bob", 22},
    {"Charlie", 19}
};
Dictionary<string, int> studentAges = new Dictionary<string, int>
{
    {"Alice", 20},
    {"Bob", 22},
    {"Charlie", 19}
};
Dim studentAges As New Dictionary(Of String, Integer) From {
	{"Alice", 20},
	{"Bob", 22},
	{"Charlie", 19}
}
$vbLabelText   $csharpLabel

さて、「Alice」という名前の学生の年齢を取得したい場合、まずContainsKeyメソッドを使用して「Alice」が辞書のキーであるかを確認します。

string student = "Alice";
if(studentAges.ContainsKey(student))
{
    int age = studentAges [student];
    Console.WriteLine($"{student} is {age} years old.");
}
else
{
    Console.WriteLine($"{student} does not exist in the dictionary.");
}
string student = "Alice";
if(studentAges.ContainsKey(student))
{
    int age = studentAges [student];
    Console.WriteLine($"{student} is {age} years old.");
}
else
{
    Console.WriteLine($"{student} does not exist in the dictionary.");
}
Dim student As String = "Alice"
If studentAges.ContainsKey(student) Then
	Dim age As Integer = studentAges (student)
	Console.WriteLine($"{student} is {age} years old.")
Else
	Console.WriteLine($"{student} does not exist in the dictionary.")
End If
$vbLabelText   $csharpLabel

この場合、プログラムは「Alice is 20 years old.」を出力します。辞書に存在しない学生の年齢を取得しようとした場合、ContainsKeyメソッドはKeyNotFoundExceptionがスローされるのを防ぎ、代わりにその学生が存在しないというメッセージを出力します。

しかし、ContainsKey メソッドは便利ではあるものの、常に最も効率的というわけではありません。 上記のコードスニペットでは、ContainsKey メソッドのための一つと値を取得するための一つ、二つのディクショナリの検索操作が実行されます。 これは、特に大規模な Dictionariesを扱う場合には時間がかかることがあります。

ContainsKey メソッドは、指定されたキーがディクショナリに見つからない場合に例外を処理するためのシンプルで直感的な方法ですが、TryGetValue のような代替メソッドを検討する価値があります。これは、より良いパフォーマンスで同様の機能を実現できます。 次のセクションでTryGetValueについてさらに詳しく説明します。

TryGetValueを使用して検証と取得を組み合わせる

ここで、TryGetValue メソッドが役立ちます。 TryGetValue メソッドは、検証と値の取得を1つのステップで組み合わせて、ほぼ同じコード機能を提供しながらパフォーマンスを向上させます。

TryGetValue メソッドは2つのパラメーターを必要とします。

  1. あなたが探しているキー。

  2. キーが存在する場合に値を保持するoutパラメーター。

    こちらが構文です:

Dictionary<TKey, TValue>.TryGetValue(TKey key, out TValue value)
Dictionary<TKey, TValue>.TryGetValue(TKey key, out TValue value)
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Dictionary<TKey, TValue>.TryGetValue(TKey key, out TValue value)
$vbLabelText   $csharpLabel

out キーワードは、このメソッドが value パラメーターを変更することを示すために使用されます。 指定されたキーが見つからない場合、out 値は値型のデフォルト値になります(整数の場合は0、参照型の場合はnull)。 それ以外の場合、提供されたキーに対応する値を保持します。

こちらはTryGetValueの使用方法です:

string student = "Alice";
if(studentAges.TryGetValue(student, out int age))
{
    Console.WriteLine($"{student} is {age} years old.");
}
else
{
    Console.WriteLine($"{student} does not exist in the dictionary.");
}
string student = "Alice";
if(studentAges.TryGetValue(student, out int age))
{
    Console.WriteLine($"{student} is {age} years old.");
}
else
{
    Console.WriteLine($"{student} does not exist in the dictionary.");
}
Dim student As String = "Alice"
Dim age As Integer
If studentAges.TryGetValue(student, age) Then
	Console.WriteLine($"{student} is {age} years old.")
Else
	Console.WriteLine($"{student} does not exist in the dictionary.")
End If
$vbLabelText   $csharpLabel

このコードは、ContainsKeyメソッドの例とほぼ同じ機能を提供しますが、キーの検索を一度だけ行うため、より効率的です。

TryGetValue 実行コード例

TryGetValue メソッドをよりよく理解するために、実用的なコード例を見てみましょう。 各学生に一意のIDと対応する名前が付与されている学校のデータベースを考えてみましょう。 このデータは、キーに学生IDを使用し、値に名前を使用したDictionaryに保存されます。

Dictionary<int, string> studentNames = new Dictionary<int, string>
{
    {1, "Alice"},
    {2, "Bob"},
    {3, "Charlie"}
};
Dictionary<int, string> studentNames = new Dictionary<int, string>
{
    {1, "Alice"},
    {2, "Bob"},
    {3, "Charlie"}
};
Dim studentNames As New Dictionary(Of Integer, String) From {
	{1, "Alice"},
	{2, "Bob"},
	{3, "Charlie"}
}
$vbLabelText   $csharpLabel

この場合、IDが2の学生の名前を取得したいとしますが、このIDを持つ学生がデータベースに存在することも確認したいと考えています。

従来、まずContainsKeyメソッドを使用してキー(学生ID 2)が存在するかを確認し、その後にディクショナリにアクセスして対応する値(学生名)を取得する場合があります。 ただし、TryGetValue メソッドを使用すると、これを一度に実行できます。

TryGetValue メソッドは、2 つの引数を取ります。1 つ目は探しているキーで、2 つ目はそのキーに関連付けられた値を保持する out パラメータです。 キーが見つかった場合、このメソッドはtrueを返し、対応する値をoutパラメーターに割り当てます。 そうでない場合、false を返し、out パラメーターはその型のデフォルト値を取ります。

int i = 2; // Student ID
if (studentNames.TryGetValue(i, out string value))
{
    Console.WriteLine($"The name of the student with ID {i} is {value}.");
}
else
{
    Console.WriteLine($"No student with ID {i} exists in the dictionary.");
}
int i = 2; // Student ID
if (studentNames.TryGetValue(i, out string value))
{
    Console.WriteLine($"The name of the student with ID {i} is {value}.");
}
else
{
    Console.WriteLine($"No student with ID {i} exists in the dictionary.");
}
Dim i As Integer = 2 ' Student ID
Dim value As String
If studentNames.TryGetValue(i, value) Then
	Console.WriteLine($"The name of the student with ID {i} is {value}.")
Else
	Console.WriteLine($"No student with ID {i} exists in the dictionary.")
End If
$vbLabelText   $csharpLabel

この場合、TryGetValue メソッドは studentNames 辞書でキー2を探します。 キーが見つかると、対応する値をvalue変数(学生の名前)に割り当て、メソッドはtrueを返します。 その後、プログラムは「ID 2の学生の名前はボブです」と出力します。

TryGetValueメソッドがキー2を見つけられない場合、value変数に文字列のデフォルト値(null)を割り当て、メソッドはfalseを返します。 コードはその後elseブロックに進み、「辞書の中にID 2の学生はいません」と出力します。

TryGetValue は、キーの存在確認と値の取得を一つのステップに統合することで、コードを簡素化します。また、特に大規模なディクショナリにおいては、複数のキー検索操作が不要になるため、パフォーマンス向上を提供します。

Iron Suiteの紹介

C#の学習を進めるにつれて、プログラミングの能力を大幅に向上させることができるさまざまなツールやライブラリを利用できるようになります。 これらの中に、C#アプリケーションの機能を拡張するために特別に設計されたツールのスイートであるIronライブラリがあります。 それには、IronPDF、IronXL、IronOCR、およびIronBarcodeが含まれます。 これらのライブラリのそれぞれには独自の機能があり、標準のC#と併用することで大きな利点を提供します。

IronPDF

C# Dictionary `TryGetValue`(開発者向けの仕組み)図1

.NETでPDFを作成するIronPDFを発見するは、HTMLからPDFファイルを生成し、編集し、.NETアプリケーションでPDFコンテンツを抽出するように設計されたC#ライブラリです。 IronPDFを使用すると、プログラムでPDFレポートを生成し、PDFフォームに入力し、PDFドキュメントを操作することができます。 ライブラリには、HTMLをPDFに変換する機能も備わっており、既存のHTMLコンテンツを簡単にPDFに変換することができます。

IronPDFのハイライトは、すべてのレイアウトとスタイルをそのまま保持するHTML to PDF機能です。 ウェブコンテンツからPDFを作成することができ、レポート、請求書、および文書化に適しています。 HTMLファイル、URL、およびHTML文字列はシームレスにPDFに変換できます。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

このトピックの文脈では、辞書から学生のデータを取得して、PDFレポートを生成するシナリオを想像してみてください。 TryGetValue は必要なデータを効率的に取得し、IronPDF を活用して PDF ドキュメントを作成できます。

IronXL

C# Dictionary `TryGetValue`(開発者向けの仕組み)図2

IronXL for Excel Interactions を探索 は C# および .NET 用の Excel ライブラリです。 これにより、開発者はInteropを使用せずに.NETアプリケーション内でExcelファイルの読み取り、書き込み、作成が可能になります。Excelスプレッドシートからデータをエクスポートまたはインポートする必要があるシナリオに最適です。

TryGetValueについて、キーが製品IDを表し、値がそれらの数量を表すDictionaryを持っていると仮定します。 特定の製品の数量を取得するためにTryGetValueを使用し、その数量をExcel在庫管理スプレッドシートで更新するためにIronXLを使用することができます。

IronOCR

C# Dictionary `TryGetValue`(開発者向けの仕組み)図3

テキスト認識のためのIronOCRの力を解き放とうは、.NETおよびC#用の高度なOCR(光学文字認識)およびバーコード読み取りライブラリです。 開発者は、.NETアプリケーションで画像やPDFからテキストやバーコードを読み取ることができます。 これは、スキャンされた文書や画像からデータを抽出し、コード内で作業する際に特に役立ちます。

IronOCRを使用してスキャンしたドキュメントから学生IDを抽出するシナリオを考えてみてください。 処理が完了したら、IDと対応する学生の詳細をDictionaryに保存します。 特定の学生の詳細を取得する際に、TryGetValue を使用すると、Dictionary から効率的にデータを取得できます。

IronBarcode

C# Dictionary `TryGetValue`(開発者向け動作方法)図4

IronBarcode のバーコードソリューションについて学ぶ は、.NET 用のバーコード読み取りおよび書き込みライブラリです。 IronBarcodeを使用すると、開発者はさまざまなバーコードおよびQRコード形式を生成および読み取ることができます。 これは、コンパクトで機械が読み取り可能な形式でデータをエンコーディングおよびデコーディングするための強力なツールです。

実際のシナリオで、小売システムに製品情報を保存するためにバーコードを使用していると想像してください。 各バーコードは、辞書のキーとして保存された一意の製品IDに対応する可能性があります。 バーコードがスキャンされたとき、TryGetValue を使用して、Dictionary から関連する製品の詳細を迅速に取得して表示することができます。

結論

私たちは、TryGetValueメソッドのような標準のC#機能と組み合わせてIronライブラリの機能を探求する中で、これらのツールが開発プロセスを大幅に強化できることが明らかになっています。 PDF、Excelファイル、OCR、またはバーコードを扱っている場合でも、Iron Suiteはあなたのニーズに合わせたソリューションを提供します。

さらに魅力的なのは、これらの製品それぞれがIron Softwareの製品の無料トライアルを提供しており、機能を無料で探索および試すことができるという点です。ライブラリの使用を継続することを決めた場合、ライセンスは各製品につき$749から始まります。 さらに、複数のIronライブラリに興味がある場合は、一つ一つの商品を買うよりも、二つの商品分の価格で全体のIron Suiteを購入できます。

チペゴ
ソフトウェアエンジニア
チペゴは優れた傾聴能力を持ち、それが顧客の問題を理解し、賢明な解決策を提供する助けとなっています。彼は情報技術の学士号を取得後、2023年にIron Softwareチームに加わりました。現在、彼はIronPDFとIronOCRの2つの製品に注力していますが、顧客をサポートする新しい方法を見つけるにつれて、他の製品に関する知識も日々成長しています。Iron Softwareでの協力的な生活を楽しんでおり、さまざまな経験を持つチームメンバーが集まり、効果的で革新的な解決策を提供することに貢献しています。チペゴがデスクを離れているときは、良い本を楽しんだり、サッカーをしていることが多いです。
< 以前
C# のデフォルトパラメータ (開発者向けの動作方法)
次へ >
C# ラウンド(開発者向けの仕組み)