黙々とC#

"In a mad world of VBA, only the mad are sane" 『VBAという名の狂った世界で狂っているというのなら私の気は確かだ』

C#読書会 『C# ショートコードプログラミング 第2版』に関する感想など 第2章

大阪で定期的に開催されているC# 読書会での『C# ショートコードプログラミング 第2版』に関する感想などをまとめました。

C#ショートコードプログラミング 第2版 (MSDNプログラミングシリーズ)

C#ショートコードプログラミング 第2版 (MSDNプログラミングシリーズ)

2.1

2.2

var points = from x in Enumerable.Range(1,7) from y in Enumerable.Range(1,7) select new Point(x,y);

2.4

インデント位置などに全角空白が含まれていると Monoはコンパイルできない。 (学生の授業で) csc.exeは通る。

Visual Studio メニューバーの[編集]-[詳細]-[スペースの表示]

日本語変数名を使う。 ・専門用語で対応する英語が見慣れないもの   →可読性が落ちる場合など ・日本語に対応する 英語が複数ある場合、  人によって単語がばらつくのを防ぐ目的で。

2.5

・日本語の変数名 複数なら「群」を後ろに付けるなど

array とかListつければよくね。 intelisense的にも。

2.6

OnPropertyChanged でExpressionをよく使う。(MVVM)

Array.Sort .NET Framework 4.0までは 常にクイックソート

.NET Framework 4.5からは
個数16まで挿入ソート(安定)
特定条件で ヒープソート
それ以外は クイックソート(不安定)
挿入ソート・ヒープソートでは

2.7 静的メソッド分身の術

2つの話が混ざっている。 ・ジェネリックを使うと、  静的クラスで複数の実体を持つことができる ・初期化の必要がないのでstaticクラスに

静的コンストラクタは、呼び出されるタイミングが わかりづらい。 VSのコードの分析で非推奨とでる。

2.8

米田さんコード void Main() { var v = Sum().TakeWhile(i => i < 100).Last(); v.Dump(); }

public static IEnumerable Sum() { int sum = 0; int i = 0; while(true){ yield return sum += ++i; } }

延々に続く処理を IEnumerable のメソッドとして 定義してやると、使い勝手&可読性が良い

2.9

選択の有無を知りたければ SelectedIndexより SelectedItemを使えばOK(選択されていなければnull)

2.10

終了処理にDispose()はわかるけど、 終了時に処理を挟む(コードを短くする)ために Dispose()を実装するのはどうか?

余談:

HttpClient はusingで呼び出すと Dispose()が呼ばれてから実際にコネクションを開放するまでに 時間がかかる(デフォルトで2分)ため、 https://twitter.com/search?src=typd&q=HTTPClient

2.11

基本 + 演算子でいいじゃん。 http://posaune.hatenablog.com/entry/2013/03/26/012217

2.12

2.13

自作メソッドを生やすのも。

.NET Core にはLINQに Append , Prependがある。

ToList(), ToArray()だと、ToListの方が速い。

IList : array[]が渡せるので危険。Atメソッドを呼ぶと落ちる。 IReadOnlyList : イミュータブル

2.14

ToList()してInsert()でいいんじゃね

2.15

a *= 2 a = (byte)(a * 2)

はILでみると同じ。 int 型にはならない。

2.16

goto が自由自在。

goto case 1: って書き方が可能。 goto で2重、3重ループからの脱出。

C# 7 ・パターンマッチが入る ・アクティブパターンは使えない。  ので片手落ちとの噂。

2.17

例外はコストが高いという人向け。

void Main() { try{ Console.WriteLine(“try”); goto err; } finally { Console.WriteLine(“finally”); } return;

err:
    Console.WriteLine("goto");

}

上のコードは
try -> finally -> gotoの順で処理される。

C#ショートコードプログラミング 第2版 (MSDNプログラミングシリーズ)

C#ショートコードプログラミング 第2版 (MSDNプログラミングシリーズ)