C#コードレシピ集

書籍情報

発売日 : 2021年08月14日

著者/編集 : 出井秀行

出版社 : 技術評論社

発行形態 : 単行本

書籍説明

内容紹介

C#を使いこなすための、究極のレシピ集。基礎から高度な文法、開発現場で使えるテクニックまで余すところなく集めました。基本文法/数値演算/例外処理/LINQ/クラス/インターフェイス/リフレクション…参照しやすいようにわかりやすく整理。「どんなコードを書けば思い通りに動くんだろう?」がスグに解決。駆け出しエンジニアから中級者まで、C#を使うすべての方にお届けします。C#9.0、.NET5.0対応。

目次

------------------------------------------------
Chapter 1 基本文法
------------------------------------------------
001 様々な型のローカル変数を宣言したい
002 constキーワードで定数を利用したい
003 文字列リテラルで改行コードやタブコードを記述したい
004 逐語的リテラル文字列を利用したい
005 文字列補間を使い文字列を整形したい
006 if文で条件分岐処理を書きたい
007 if文で多分岐処理を書きたい
008 switch文で多分岐処理を書きたい
009 AND ORなどの条件論理演算をしたい
010 条件に応じて値を変えたい(条件演算子?:)
011 ある値を他の型に型変換(キャスト)したい
012 for、while、do-while文で繰り返し処理を記述したい
013 foreachでコレクションの要素を順に処理したい
014 繰り返しの途中で処理をスキップし次の繰り返しに移りたい
015 繰り返し処理を中断したい

------------------------------------------------
Chapter 2 数値演算
------------------------------------------------
016 数値の加減乗除および剰余を求めたい
017 インクリメント演算子(++)、デクリメント演算子(--)を使いたい
018 intやdoubleの最小値、最大値を求めたい
019 絶対値を求めたい
020 べき乗を求めたい
021 切り捨て、切り上げをしたい
022 指定した位置で切り捨て、切り上げをしたい
023 四捨五入したい
024 数値演算時のオーバーフローを検知したい
025 ふたつの浮動小数点数が等しいか比較したい
026 ランダムな値を生成したい
027 ビット演算をしたい
028 Nビット目をOn/Offしたい
029 Nビット目の状態を調べたい

------------------------------------------------
Chapter 3 文字列処理
------------------------------------------------
030 文字列を数値に変換したい
031 数値を文字列に変換したい
032 書式を指定して整数を文字列に変換したい
033 数値を桁数を指定して文字列化したい
034 文字列がnullまたは空文字列であるか調べたい
035 文字列の中に指定した部分文字列があるか調べたい
036 文字列が指定した文字列で開始/終了しているかを調べたい
037 ふたつの文字列の先頭N文字が一致しているかを調べたい
038 大文字小文字を区別せずにふたつの文字列を比較したい
039 文字列の両端にある空白を取り除きたい
040 文字列の中で指定した部分文字列が最初に現れる位置を求めたい
041 文字列から部分文字列を取得したい
042 文字列から指定した範囲の文字を取り除きたい
043 文字列の一部を別の文字列に置き換えたい
044 指定した位置に文字列を挿入したい
045 文字列を大文字あるいは小文字に変換したい
046 文字列の中の各文字を1文字ずつ操作したい
047 指定した文字数になるまで文字列の先頭に空白を埋め込みたい
048 文字列を指定した区切り文字で分割したい
049 StringBuilderを使い複数の文字列を高速に連結したい
050 StringBuilderを使い文字列の置換処理をしたい
051 文字列補間内でエスケープ文字を無効にしたい
052 コレクションの要素を指定した区切り文字で連結したい
053 文字列と文字配列を相互変換したい
054 文字列とbyte配列を相互変換したい
055 サロゲートペア文字に対応した文字列処理を行いたい
056 カルチャに依存しない文字列比較を行いたい

------------------------------------------------
Chapter 4 日付時刻処理
------------------------------------------------
057 本日の日付や現在の時刻を取得したい
058 DateTimeオブジェクトから年月日時分秒ミリ秒を取り出したい
059 曜日を取得したい
060 N日後、N日前を求めたい
061 Nか月後、Nか月前を求めたい
062 ふたつの日時を比較したい
063 うるう年かどうか調べたい
064 1月1日からの年間積算日を求めたい
065 指定した月の月末日を求めたい
066 ふたつの日時の差を求めたい
067 日付文字列をDateTime型に変換したい
068 日付、時刻を様々な書式で文字列化したい
069 和暦の元号と年を求めたい
070 元号を表す序数から元号(文字列)を求めたい
071 日付を和暦表示したい
072 カルチャを指定して日時を文字列化したい

------------------------------------------------
Chapter 5 コレクション
------------------------------------------------
073 配列を利用したい
074 コレクションの要素を順に取り出したい
075 配列の要素を同じ値で埋めたい
076 配列の順序を逆順にしたい
077 配列の順序を昇順に並べ替えたい
078 Comparisonを使用して配列を並べ替えたい
079 2次元配列を使いたい
080 ジャグ配列を使いたい
081 Listを使いたい
082 Listを宣言と同時に初期化したい
083 Listに複数の要素を一度に追加したい
084 Listから条件に一致した要素を削除したい
085 Listの要素の順序を反転させたい
086 Listの要素を昇順に並べ替えたい
087 Comparisonを使用してListを並べ替えたい
088 List内を高速にサーチしたい
089 ForEachメソッドですべての要素を順に処理したい
090 Listを読み取り専用にしたい
091 Dictionaryを利用したい
092 Dictionary内のすべてのキーを参照したい
093 HashSetを利用したい
094 HashSetで集合演算を行いたい
095 Stackを利用したい
096 Queueを利用したい

------------------------------------------------
Chapter 6 クラスと構造体の基礎
------------------------------------------------
097 クラスを定義したい
098 プロパティを定義したい
099 読み取り専用プロパティを定義したい
100 プロパティに初期値を設定したい
101 バッキングフィールドを利用したプロパティを定義したい
102 メソッドを定義したい
103 同名のメソッドを複数定義(オーバーロード)したい
104 可変長引数を持つメソッドを定義したい
105 メソッドを式形式で簡潔に書きたい
106 コンストラクターを定義したい
107 複数のコンストラクターを定義したい
108 クラスを継承したい
109 静的クラスを定義したい
110 構造体を定義したい
111 匿名型を使いたい
112 オブジェクトを複製したい

------------------------------------------------
Chapter 7 列挙型
------------------------------------------------
113 列挙型を定義したい
114 列挙型に定義されている値をすべて列挙したい
115 列挙型と数値を相互に変換したい
116 列挙型と文字列を相互に変換したい
117 指定した値が列挙型で定義されているか判断したい
118 Flags属性で列挙型をビットフラグとして扱いたい

------------------------------------------------
Chapter 8 nullを扱う
------------------------------------------------
119 null許容値型を利用したい
120 null合体演算子でnullのときだけ別の値にしたい
121 null条件演算子でnullチェックを省略したい
122 null条件演算子とnull合体演算子を同時に使いたい
123 null合体割り当て演算子でnullのときに値を変更したい
124 null許容参照型を利用したい

------------------------------------------------
Chapter 9 LINQ
------------------------------------------------
125 条件に該当する要素だけ取得したい(Where)
126 クエリの結果を新しい型に変換したい(Select)
127 ある位置までの要素を取得したい(Take/TakeWhile)
128 ある位置まで要素をスキップしたい(Skip/SkipWhile)
129 最初の要素を取得したい(First/FirstOrDefault)
130 最後の要素を取得したい(Last/LastOrDefault)
131 指定した位置の要素を取得したい(ElementAt)
132 重複する値を取り除きたい(Distinct)
133 シーケンスの要素の順序を反転したい(Reverse)
134 データを並べ替えたい(OrderBy/OrderByDescending)
135 特定の型だけを取得したい(OfType)
136 シーケンスの先頭/末尾に要素を追加したい(Prepend/Append)
137 シーケンス内の要素数を求めたい(Count)
138 合計を求めたい(Sum)
139 最小値、最大値を求めたい(Min/Max)
140 平均値を求めたい(Average)
141 すべての要素が条件を満たしているかどうかを調べたい(All)
142 いずれかの要素が条件を満たしているかどうかを調べたい(Any)
143 指定した要素がシーケンスに含まれているか調べたい(Contains)
144 シーケンスを配列やListに変換したい(ToArray/ToList)
145 ディクショナリに変換したい(ToDictionary)
146 HashSetに変換したい(ToHashSet)
147 指定したキーでグルーピングしてILookupに変換したい
148 和集合を求めたい(Union)
149 積集合を求めたい(Intersect)
150 差集合を求めたい(Except)
151 指定したキーに基づいて結果をグループ化したい(GroupBy)
152 関連のあるふたつのシーケンスをひとつにまとめたい(Join)
153 ふたつのシーケンスの要素を関連付けその結果をグループ化したい(GroupJoin)
154 階層構造になったオブジェクトのシーケンスを平坦化したい(SelectMany)
155 ふたつのシーケンスを連結したい(Concat)
156 ふたつのシーケンスの対になる要素をタプルのシーケンスに変換したい(Zip)
157 ふたつのシーケンスが等しいかを調べたい(SequenceEqual)
158 指定した範囲の数値コレクションを生成したい(Range)
159 指定した値を繰り返すシーケンスを生成したい(Repeat)
160 特殊な集計処理を行いたい(Aggregate)
161 複数のLINQメソッドを連結させたい
162 LINQで外部結合を行いたい

------------------------------------------------
Chapter 10 例外処理と後処理
------------------------------------------------
163 例外処理を記述したい
164 複数の例外に対応したい
165 例外情報にアクセスしたい
166 例外を発生させたい
167 例外を再スローしたい
168 例外オブジェクトに独自のデータを追加したい
169 InnerExceptionプロパティを再帰的にたどりたい
170 独自例外を定義したい
171 例外処理で例外フィルターを使い対象例外を絞りたい
172 条件演算子やnull合体演算子とともに例外を発生させたい
173 try-finallyで確実に後処理をしたい
174 using文で確実にDisposeメソッドを呼び出したい
175 using宣言を使い、より簡単にusing文を書きたい

------------------------------------------------
Chapter 11 より高度なクラスの定義
------------------------------------------------
176 ラムダ式を受け取るメソッドを定義したい
177 インデクサを定義したい
178 イベントを定義し利用したい
179 拡張メソッドでクラスを拡張したい
180 LINQ to Objectsに対応した拡張メソッドを定義したい
181 演算子をオーバーロードしたい
182 独自の型でキャスト式を利用可能にしたい
183 動的にプロパティを追加できるdynamicクラスを作りたい
184 レコード型で安全性を高めたい

------------------------------------------------
Chapter 12 ジェネリックとインターフェイス
------------------------------------------------
185 ジェネリッククラスを定義したい
186 ジェネリックメソッドを定義したい
187 インターフェイスを定義したい
188 インターフェイスに既定の動作を定義したい
189 既定のインターフェイスメソッドを上書きしたい
190 yield構文を使いIEnumerableを返すメソッドを定義したい
191 IEquatableインターフェイスを持つクラスを定義したい
192 IEqualityComparerインターフェイスを実装したい
193 IComparableインターフェイスを実装し大小比較したい
194 IComparerインターフェイスを実装してソートしたい
195 IDisposableインターフェイスを実装したい
196 オブザーバーデザインパターンを実装したい

------------------------------------------------
Chapter 13 よりスマートにコードを書く
------------------------------------------------
197 最上位レベルステートメントを使いたい
198 クラス名を省略してメソッドを呼び出したい
199 nameof式でシンボルの名前の間違いをなくしたい
200 defaultキーワードでオブジェクトの既定値を指定したい
201 new式でインスタンス生成のコードを簡略化したい
202 out変数で引数宣言を簡略化したい
203 メソッド呼び出しで名前付き引数を使用したい
204 switch式を利用したい
205 switch文のcaseラベルに条件を付加したい
206 is演算子でパターンマッチングを使いたい
207 ローカル関数を定義したい
208 プロパティのgetアクセサー、setアクセサーを式形式で書きたい
209 init専用セッターでクラスの安全性を高めたい
210 メソッドでタプルを利用しふたつの値を返したい
211 配列でより高度なインデックス操作をしたい
212 dynamic型を使いたい

------------------------------------------------
Chapter 14 並列処理と非同期処理
------------------------------------------------
213 BackgroundWorkerクラスを利用してバックグラウンドで処理を動かしたい
214 awaitを使用して非同期メソッドを呼び出したい
215 同期メソッドを非同期メソッドに変更したい
216 Taskクラスで起動したタスクを最大N秒まで待ちたい
217 指定した時間だけ処理を待機させたい
218 Taskをキャンセルしたい
219 Parallelクラスを使用して並列処理をさせたい
220 PLINQで並列処理をしたい
221 PLINQで並列処理の結果の順序を制御したい
222 PLINQで並列処理の結果に対しても並列処理したい
223 PLINQで例外処理を記述したい
224 複数のTaskを並列で走らせたい
225 lock構文で安全に並列処理をしたい
226 フィールドをvolatile宣言して安全に並列処理をしたい
227 Interlockedクラスを使用して安全に並列処理をしたい
228 並列処理で安全にコレクションにアクセスしたい
229 Progressで進行状況を表示したい

------------------------------------------------
Chapter 15 リフレクション
------------------------------------------------
230 オブジェクトの型情報を取得したい
231 リフレクションを利用しプロパティの値を取得したい
232 リフレクションを利用しプロパティに値を設定したい
233 指定した型のプロパティの一覧を取得したい
234 リフレクションを利用しメソッドを呼び出したい
235 指定した型のメソッドの一覧を取得したい
236 コンストラクターを動的に呼び出したい
237 コンストラクターの一覧を得たい
238 現在のクラス名、メソッド名を取得したい
239 実行時にオブジェクトの型の種類を調べたい
240 プロパティに指定した属性が付加されているか調べたい
241 プロパティに付加された属性の値を取得したい
242 メソッドに付加された属性を取得したい
243 列挙型のフィールドに付加された属性を取得したい
244 クラスに付加された属性を取得したい
245 オブジェクトのプロパティ名と値をDictionaryに変換したい
246 文字列プロパティの値がnullならすべて空文字列にしたい
247 独自の属性を定義したい

------------------------------------------------
Chapter 16 正規表現
------------------------------------------------
248 文字列が指定したパターンと一致するか調べたい
249 文字列の中からパターンに一致する箇所をひとつ取り出したい
250 文字列の中からパターンに一致する箇所をすべて取り出したい
251 正規表現を使い高度な置換処理をしたい
252 文字列を指定したパターンで分割したい
253 大文字小文字を区別せずマッチさせたい
254 複数行モードで正規表現を使いたい

------------------------------------------------
Chapter 17 ファイルとディレクトリ
------------------------------------------------
255 ファイルパスを組み立てたい
256 パス名を構成要素に分割したい
257 相対ファイルパスを絶対パスに変換したい
258 ファイルを操作したい
259 ファイルの拡張子を変更したい
260 ファイルサイズを取得したい
261 ファイルの更新日時を取得/更新したい
262 ファイルの読み取り専用属性を取得または設定したい
263 ディレクトリを操作したい
264 指定したディレクトリにあるファイル一覧を得たい
265 指定したディレクトリにあるディレクトリ一覧を得たい
266 現在の作業ディレクトリを取得したい
267 一時的に利用するファイルを作成したい
268 特殊なフォルダ名を取得したい
269 テキストファイルを読み込みたい
270 テキストファイルを作成したい
271 テキストファイルに追記したい
272 Shift-JISのファイルを扱いたい
273 バイナリファイルを読み込みたい
274 byte配列のデータをファイルに出力したい
275 文字列をStreamとして扱いたい

------------------------------------------------
Chapter 18 Zipファイル
------------------------------------------------
276 ディレクトリからZipアーカイブを作成したい
277 Zipアーカイブに新しいファイルを追記したい
278 Zipアーカイブからファイルを削除したい
279 Zipアーカイブファイルに格納されているファイルの一覧を取得したい
280 Zipアーカイブ内のファイルをすべて抽出したい
281 Zipアーカイブから指定したファイルを抽出したい

------------------------------------------------
Chapter 19 ロギング
------------------------------------------------
282 ILoggerでログを出力したい
283 appsettings.jsonでログレベルを設定したい
284 コードでログレベルを設定したい
285 ログ出力でメッセージテンプレートを使用したい
286 NLogを使いたい
287 Log4Netを使いたい
288 ZLoggerを使いたい

------------------------------------------------
Chapter 20 Entity Framework Core
------------------------------------------------
289 Entity Framework Coreの利用を開始したい
290 Entity Framework Coreでモデルを定義したい
291 データベーステーブル間のリレーションを定義したい
292 属性を使いエンティティクラスのプロパティに制約を設定したい
293 エンティティクラスにデータベーステーブルにマッピングされないプロパティを定義したい
294 データベースのテーブル名、カラム名を明示的に指定したい
295 エンティティクラスのプロパティで主キーを明示したい
296 データベーステーブルのカラムにインデックスを作成したい
297 列挙型の値を文字列としてデータベースに格納したい
298 データベーステーブルに行を挿入したい
299 データベーステーブルから条件に合致した行を取得したい
300 データベースから関連するテーブルのデータを取得したい
301 データベーステーブルの行を更新したい
302 データベーステーブルから行を削除したい
303 データベースからデータを読み込まずに更新したい
304 EF Coreで生のSQLを発行したい
305 EF Coreでトランザクションを制御したい
306 EF Coreで更新されないシナリオでパフォーマンスを向上させたい
307 EF Coreでオプティミスティック同時実行制御を行いたい
308 EF Coreでコマンドタイムアウト値を設定したい
309 EF Coreが出力するSQLを確認したい

------------------------------------------------
Chapter 21 ネットワーク
------------------------------------------------
310 HTMLをエンコード・デコードしたい
311 URLをエンコード・デコードしたい
312 JSONシリアライズ、デシリアライズしたい
313 パラメーター付きクエリ文字列を組み立てたい
314 URLで指定したWebページ(HTML)を取得したい
315 Webサーバーからファイルをダウンロードしたい
316 指定したURLからJSONデータを取得したい
317 HttpClientでContent-typeを指定したい
318 HttpClientでリクエストヘッダーにUser-Agentを設定したい
319 HttpClientでHTTPステータスコードを確認したい
320 HTTPメソッドを指定してAPIを呼び出したい
321 HTTP POSTでフォームデータを送信したい
322 HTTP POSTでJSONデータを送信したい
323 HttpClientFactoryで生成したHttpClientを利用したい
324 Http通信のログを出力したい
325 メールを送信したい
326 添付ファイル付きメールを送信したい

------------------------------------------------
Chapter 22 暗号化
------------------------------------------------
327 共有キー暗号方式の暗号化と復号のためのキーを生成したい
328 共有キー暗号方式で文字列を暗号化したい
329 共有キー暗号方式で暗号化された文字列を復号したい
330 共有キー暗号方式でファイルを暗号化したい
331 共有キー暗号方式で暗号化されたファイルを復号したい
332 公開キー暗号方式で利用する公開キーと秘密キーを生成したい
333 公開キー暗号方式の秘密キーをキーコンテナに格納したい
334 公開キー暗号方式を使って暗号化したい
335 公開キー暗号方式を使って復号したい
336 RSA公開キーファイル(PKCS#1)を使って暗号化したい
337 RSA秘密キーファイル(PKCS#1)を使って復号したい
338 データのハッシュ値を求めたい
339 ハッシュ値を使いデータの検証を行いたい
340 デジタル署名をしたい
341 デジタル署名したデータを検証したい

------------------------------------------------
Chapter 23 ExcelとWord
------------------------------------------------
342 [Excel]NPOIを使ってExcelファイルを作成したい
343 [Excel]NPOIを使ってセルに値を設定したい
344 [Excel]NPOIを使って特定のセルの値を取得したい
345 [Excel]NPOIを使ってすべてのセルの値を取得したい
346 [Excel]NPOIを使ってセルの値を変更したい
347 [Excel]NPOIを使ってセルにスタイルを設定したい
348 [Word]OpenXMLでWord文書を新規作成したい
349 [Word]OpenXMLで段落の位置揃えをしたい
350 [Word]OpenXMLで既存文書に段落を挿入したい
351 [Word]OpenXMLで段落にスタイルを適用したい

------------------------------------------------
Chapter 24 単体テスト
------------------------------------------------
352 xUnit.netを使いたい
353 メソッドが期待した値を返してくるかテストしたい
354 指定した範囲に収まっているかテストしたい
355 指定した例外が発生するかテストしたい
356 テストの前処理を記述したい
357 InlineData属性でテストメソッドに渡すパラメーターの値を指定したい
358 Member属性でテストメソッドに渡すパラメーターの値を指定したい
359 単体テストでデバッグメッセージを出力したい
360 [Moq]Moqの利用を開始したい
361 [Moq]Mockオブジェクトにプロパティを定義したい
362 [Moq]Mockオブジェクトにメソッドを定義したい
363 [Moq]Mockオブジェクトに例外を発生させるメソッドを設定したい
364 [Moq]Mockオブジェクトでメソッドが呼び出された際の処理を記述したい
365 [xUnit][Moq]Mockを使って単体テストを行いたい
366 [xUnit][Moq]MockをDIして単体テストを行いたい

------------------------------------------------
Chapter 25 落穂拾い
------------------------------------------------
367 byte配列とBase64文字列を相互変換したい
368 文字列をBase64でエンコード・デコードしたい
369 byte配列を16進表記したい
370 どのメソッドから呼び出されたのか知りたい
371 OSの情報を取得したい
372 論理プロセッサの数を調べたい
373 環境変数を取得したい
374 現在のプロセス環境ブロックで環境変数をセットしたい
375 GUIDを生成したい
376 指定した間隔である処理を繰り返し動かしたい
377 ある時点からの経過時間を求めたい
378 プロセスを起動したい
379 起動したプロセスが終了するまで待ちたい
380 起動したプロセスの標準出力の内容を取得したい
381 標準エラー出力にメッセージを出力したい
382 VisualStudioのデバッグウィンドウにログを出力したい
383 コンソールアプリケーションで汎用ホストを利用したい
384 appsettings.jsonから構成データの値を取得したい
385 構成データを環境により切り替えたい

参考文献
Index

著者情報

出井, 秀行
出井秀行
東京理科大学理工学部情報科学科卒業。株式会社ジードに勤務。 2004年からgushwellというハンドルネームでオンライン活動を開始。主にC#に関する技術情報を発信。2005年から17年連続でMicrosoft MVPアワードを受賞。 著書『実戦で役立つ C#プログラミングのイディオム/定石&パターン』『新・標準プログラマーズライブラリ なるほどなっとくC#入門』など。