投稿

1月, 2017の投稿を表示しています

C#のラムダのソートで全半角や大文字小文字を無視する

イメージ
C#のラムダ式での並び替えをする場合、単純な並び替えをして ToList() するのであれば OrderBy や OrderByDescending 等で事足ります。ただ、日本語環境にありがちな大文字や小文字、全角や半角を無視しての並び替えなど、細かい条件をつけた並び替えは、String.Compare メソッドを使用する必要があります。 大文字や小文字、全角や半角も無視して並び替える例 var lst = new List () {     new Product {Name = "CCC",Amount = 1000, },     new Product {Name = "aaaa",Amount = 2000, },     new Product {Name = "ZZZ",Amount = 3000, },     new Product {Name = "BBBB",Amount = 5000, }, }; // 昇順(日本語のロケーションではこれだけでいけます) lst.Sort((x, y) => string.Compare(x.Name, y.Name)); // 降順 lst.Sort((x, y) => string.Compare(y.Name, x.Name)); // 明示的にオプションを付ける場合 lst.Sort((x, y) => string.Compare(x.Name, y.Name, true)); // カルチャ情報を「日本」に指定 lst.Sort((x, y) => string.Compare(x.Name, y.Name, true, new CultureInfo("ja-JP"))); 大文字と小文字に関しては、ToUpper() や ToLower() などを使って揃えてから行う書き方をする人もいますが、これらは Compare メソッドと比較すると 2 倍の速度差があるようです。 大文字/小文字を区別しないで文字列を比較するには?[C#、VB] http://www.atmarkit.co.jp/fdotnet/dotnet

C#のbyteをintに変換する

イメージ
C#の byte って、妙な動きをしますよね。 C#におけるbyteの足し算 // 代入した時点で、暗黙的に int から byte へ変換されている。 byte b = 1; byte c = 10; // 演算は int で行われるため、明示的に型変換を行う必要がある。 byte sum = (byte)(b + c); byte は 255 までしか入りません。 なので、以下のようには書けません。コンパイルエラーとなります。 byte b = 258; 面白いのがこれ。 byte b = 255; byte c = 255; // 254 byte sum = (byte)(b + c); 実行時にエラーにもならず、なぜか 254 が返ってきます。 byteを計算するとかあまりないケースですが、扱う際にはちょっと注意が必要です。 byte (C# リファレンス) https://msdn.microsoft.com/ja-jp/library/5bdb6693.aspx

C#でCharをIntに変換する際は注意

イメージ
C# で Char を Int に変換する時は注意が必要です。 バグを生みやすいcharの変換 文字列を先頭からチェックしたい場合などに多用する String.Chars プロパティ。 https://msdn.microsoft.com/ja-jp/library/system.string.chars(v=vs.110).aspx これは使い勝手がなかなか良いのですが、名前のとおり Char で返ってきます。 返ってきた Char は数値に変換して比較なんかする場合が多いと思いますが… var number = "12345"; // 49 var firstNumber1 = Convert.ToInt32(number[0]); // 1 var firstNumber2 = Convert.ToInt32(number[0].ToString()); ToString() していない場合は、10 進数の ASCII コードが返ってきます。 ASCII文字コード http://e-words.jp/p/r-ascii.html ビルドエラーになるわけではないので、きちんとした単体テストを作っておくか、実際に動かして検証する必要がありますね。

Chromeでショートカットキーからタブを複製するにはAlt+D&Alt+Enterで

イメージ
Google Chrome には、「タブの複製」 というショートカットキーは残念ながらありません。しかし、Alt + D と Alt + Enter という合せ技でタブを複製することができます。 Alt + D でアドレスバーにフォーカスを移します。 その状態で、Alt + Enter を押下すると、タブが複製されます。 Alt キーを押しっぱなしにして、D, Enter を覚えると瞬時に複製することができます。 どうしても一つの手順だけで複製したいんだ! という場合は、こんな拡張機能もあります。 Duplicate Tab Shortcut Key

C#で文字列内の空白を削除する

イメージ
文字列の中にある空白を削除したい場合があります。 この場合、空白を別文字に置換する、ということで Replace を使用しますが、日本語環境の場合は半角と全角があるため注意が必要です。 var s1 = " おお! しんでしまうとは なにごとだ! "; // "おお!しんでしまうとはなにごとだ!" s1 = s1.Replace(" ","").Replace(" ",""); // 正規表現の場合 s1 = Regex.Replace(s1, @"\s", ""); なお、Trim() は前後の空白のみ除去します。 これは全角と半角、いずれのスペースも削除してくれます。