投稿

3月, 2014の投稿を表示しています

[C#] TryParse での日付 (yyyymmdd) チェック

TryParse メソッドを使用した日付チェックでは、元の文字列に注意を払わなければならない。 string s = "20140101"; DateTime d1, d2; bool res1 = DateTime.TryParse(s, out d1); bool res2 = DateTime.TryParseExact(s, "yyyymmdd", null, DateTimeStyles.None, out d2); // False Debug.WriteLine(res1.ToString()); // True Debug.WriteLine(res2.ToString()); DateTime.TryParse では、以下のようなパターンの文字列であれば日付として許容される。 "2014.01.01" "2014-01-01" "2014/01/01" "2014年01月01日" しかし、データでよくありがちな "yyyymmdd" は許容されずに弾かれてしまう。 この場合、文字列を分解して上記のような形式に直すのもいいが、DateTime.TryParseExact でパターンを指定することでチェックが行える。DateTimeStyles 列挙体が必須になるが、特に指定がなければ DateTimeStyles.None としておく。 DateTime.TryParse メソッド http://msdn.microsoft.com/ja-jp/library/ch92fbc1(v=vs.110).aspx DateTime.TryParseExact メソッド http://msdn.microsoft.com/ja-jp/library/system.datetime.tryparseexact(v=vs.110).aspx DateTimeStyles 列挙体 http://msdn.microsoft.com/ja-jp/library/91hfhz89(v=vs.110).aspx

[C#] Enum の文字列を取得

Enum は数値で扱うのが、その項目自体を文字列で取得したいケースもある。 foreach で列挙すると、以下のようになる。 using System.Diagnostics; enum Size { S, M, L, すーぱーさいず, } foreach (string x in Enum.GetNames(typeof(Size))) { // 出力結果 // S // M // L // すーぱーさいず Debug.WriteLine(x.ToString()); } Enum.GetNames メソッド http://msdn.microsoft.com/ja-jp/library/system.enum.getnames(v=vs.110).aspx Enum については、 こちら でも色々と書いている。

[C#] Array.FindAll による要素の複数結果検索

イメージ
C#2.0 でも、delegate と Array やリストコレクションが持つメソッドを組み合わせると、リファクタリング可能なコードを書くことができる。 以下は、Array.FindAll を使用して、CSV の値から文字列の操作を行っている。 using System; using System.Collections.Generic; using System.Diagnostics; string[] csv = { "abc,def,aab,dee,cba,bac" }; string[] ret = Array.FindAll(csv, delegate(string x) { // a が含まれる文字列を検索する(あいまい検索)。 return x.Contains("a"); }); // 結果 : abc, aab, cba, bac Debug.WriteLine(ret); string[] ret2 = Array.FindAll(csv, delegate(string x) { // a から始まる文字列を検索する(前方一致検索)。 return x.StartsWith("a"); }); // 結果 : abc, aab Debug.WriteLine(ret2); ret 行はリファクタリング可能。 Array.Find ジェネリック メソッド - msdn http://msdn.microsoft.com/ja-jp/library/d9hy2xwa(v=vs.80).aspx