TECH PLAY

C#コードレシピ集

3,608円 (税込)

楽天

C#コードレシピ集

書籍情報

発売日:

著者/編集:出井秀行

出版社:技術評論社

発行形態:単行本

書籍説明

内容紹介

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#入門』など。

類似書籍