実戦で役立つ C#プログラミングのイディオム/定石&パターン

サポートページ

この記事を読むのに必要な時間:およそ 0.5 分

ダウンロード

(2020年6月15日更新)

本書で使用したサンプルコードおよび演習問題の解答は,以下のリンクをクリックすることでダウンロードできます。

なお,サンプルコードに一部修正がありました。6月14日以前にダウンロードされた方は,お手数ですが,再度ダウンロードしていただきますよう,お願いいたします。

ダウンロード
サンプルコード
演習問題の解答

いずれも圧縮ファイルとなっておりますので,解凍すれば利用できるようになります。なお,詳しいことは本書のP.5~P.6をお読みください。

免責事項

それぞれのソースコードは,ご自身の責任において使用してください。使用した如何なる結果についても,著者および技術評論社は一切の責任を負いません。

補足情報

2018年11月現在,執筆時点からC#を取り巻く状況が変わっていますので,以下のとおり補足いたします。

(2018年11月26日最終更新)

1 MSDNからMicrosoft Docsへ

Microsoftは15年にわたって運用してきたドキュメントサイトMSDNを引退させ,新しいドキュメントサイト
「Microsoft Docs(docs.microsoft.com)」を立ち上げたうえで,そちらにドキュメントを全面移行しています。
そのため,本書の中のMSDNあるいはMSDNライブラリという用語は,Microsoft Docsと読み替えていただく必要があります。

Microsoft DocsのトップページのURLは,以下のとおりです。

なお,本書の脚注などで紹介しているMSDNへのURLにアクセスすると,新しいMicrosoft Docsのページへリダイレクトされます。

2 Visual Studio 2015という表記に関して

本書では,執筆時点の最新バージョンであるVisual Studio 2015を使用し,操作手順などを紹介していますが,Visual Studio 2017以降でも同等の機能が利用可能です。

お詫びと訂正(正誤表)

小社刊『実戦で役立つC#プログラミングのイディオム/定石&パターン』(出井秀行・著/2017年3月3日 初版 第1刷,2017年8月18日 初版 第2刷,2018年12月26日 初版 第3刷,2020年1月9日 初版 第4刷)におきまして,一部の記述に間違いのあることが判明いたしましたので,下記のとおりお知らせいたします。読者の皆様にはご迷惑をおかけし,まことに申し訳ございません。ご容赦くださいますよう,お願い申し上げます。

(2020年12月4日最終更新)

以下,第1刷,第2刷,第3刷および第4刷にある誤り
P.188 本文下から4行目

指定したキーがにディクショナリに存在しない場合、
指定したキーディクショナリに存在しない場合、

(以下2020年9月29日更新)

P.65 「3. Saleオブジェクトを1つずつ取り出し処理をする」の本文1行目

foreach 文を使い,_salesディクショナリから
foreach 文を使い,_salesリストから

(以下2020年7月9日更新)

P.29 「1.3 値型と参照型」の本文(上から2~3行目)

.NET Frameworkに定義されたカスタムクラスや構造体
.NET Frameworkに定義されたクラスや構造体

「カスタム」が不要。

P.356 リスト14-17(空行を含め5行目)


Console.WriteLine("{0}% {0}/{1}", e.ProgressPercentage,
                          e.BytesReceived, e.TotalBytesToReceive);

Console.WriteLine("{0}% {1}/{2}", e.ProgressPercentage,
                          e.BytesReceived, e.TotalBytesToReceive);

P.357 リスト14-19(下から3行目)


string s = Regex.Replace(node.Value,"【|】", "");
yield return node.Value;

string s = Regex.Replace(node.Value,"【|】", "");
yield return s;

P.361 リスト14-24(3~4行目)


ZipFile.CreateFromDirectory(sourceFolder, archiveFile, CompressionLevel.Fastest, 
				includeBaseDirectory: false);

ZipFile.CreateFromDirectory(sourceFolder, archiveFile, CompressionLevel.Fastest, 
				includeBaseDirectory: true);

P.385 演習問題「7.」の出力例(下から2行目)

Microsoft Visual C#再入門
Visual C#再入門

「Microsoft」が不要。

P.460 「19.2.1 ネストは浅くする」の本文(上から6行目)

・コードはコードを読み解くのに時間がかかる
・コードを読み解くのに時間がかかる

先頭の「コードは」が不要。

(以下2020年5月27日更新)

以下,第1刷,第2刷,第3刷および第4刷にある誤り

P.118 コード例を含め上から7行目


には、DefaultNameがnumに代入されます。


には、DefaultNameがnameに代入されます。

P.211 コード例を含め上から8行目(×のコード例の2行目)


Console.WriteLine("2015/12/31以前です。");


Console.WriteLine("2016/5/31以前です。");

(以下2019年11月27日更新)

以下,第1刷,第2刷および第3刷にある誤り

P.169 見出し「LINQを使ったコード」の下3行目

変数isAllPositiveにはtrueが設定されます。
変数isAllPositiveにはfalseが設定されます。

(以下2019年11月21日更新)

P.130 リスト4.48の7行目と8行目(空行含む)


public AppVersion(int major, int minor, int revision) 
    : this(major, minor, revision, 0) {


public AppVersion(int major, int minor, int build) 
    : this(major, minor, build, 0) {


(以下2018年7月27日更新)

以下,第1刷および第2刷にある誤り

P.116 上から10行目のソースコードの1行目


var message = GetMessage(code)


var message = GetMessage(code);

P.285 リスト11.10の下から6行目


var novelist = ReadNovelists();


var novelists = ReadNovelists();

P.348 本文の下から6行目(ソースコードは除く)

AssemblyInfo.csに内のAssmblyVersion属性に反映されます。
AssemblyInfo.cs内のAssmblyVersion属性に反映されます。

(以下2018年2月19日更新)
以下,第1刷および第2刷にある誤り

P.427 リスト17.13中6~7行目


return name.ToLower() == "meter" || name.ToLower() == "meter" || name == UnitName;


return name.ToLower() == "meter" || name == UnitName;

2つ目の「.ToLower() == "meter" || name」が余分でした。


(以下2017年8月1日更新)
以下,第1刷および第2刷にある誤り

P.205 上から2行目

秒、1/100秒)を含んだ
秒、1/1000秒)を含んだ

P.205 リスト8.3の最終行のコメント

// 1/100秒: Millisecond
// 1/1000秒: Millisecond

(以下,2017年6月5日更新)
以下,第1刷にある誤り

P.111 リスト4.20の1行目


foreach (var item in Collection) {


foreach (var item in collection) {


(以下,2017年4月19日更新)

P.169 本文中程およびリスト6.23の2行目


すべての要素が0以上か調べています。


すべての要素が0より大きいか調べています。



(以下,2017年2月13日更新)

P.320 上から6行目(空行を除く)

JSONファイルに逆シリアル化する
JSONファイルにシリアル化する

P.359 最下行


if (!File.Exists(destinationFolder)) {


if (!Directory.Exists(destinationFolder)) {

P.384 下から2行目~ P.385 上から1行目の枠で囲んだ出力例


2013年 2800円 Webデザイン講座 HTML5&CSS (Web Design)
2013年 4200円 PowerShell 実践レシピ (Server)
2014年 3800円 C#開発指南 (Development)


2016年 4800円 Microsoft Azureサーバー構築 (Serever)
2016年 2780円 Visual C#再入門 (Development)
2016年 2600円 Word・Excel実践テンプレート集 (Application)

P.399 リスト16.13の上から5行(空行を含む)


private void button1_Click(object sender, RoutedEventArgs e) {
   WriteTexts("sample.txt");
}

private async void WriteTexts(string filename) {


private async void button1_Click(object sender, RoutedEventArgs e) {
   await WriteTexts("sample.txt");
}

private async Task WriteTexts(string filename) {

P.406 下から2行目


private async Task<int> DoSomethingAsync() {


private async Task<long> DoSomethingAsync() {

P.407 下から9行目(脚注,空行含まず)


private int DoSomething() {


private long DoSomething() {

P.408 1行目


private async Task<int> DoSomethingAsync() {


private async Task<long> DoSomethingAsync() {