投稿

6月, 2015の投稿を表示しています

C# の var におけるメリット・デメリット

イメージ
C# 3.0 から導入された var。これは積極的に使うべきか、使うべきでないかでしばしば論争が繰り広げられる。

static クラスの、自身のクラス名を取得する。

通常のクラスであれば、自身のクラス名取得は簡単だ。 this.ToString(); ところが static クラスについては this と打った瞬間にこんな残念なエラーとなってしまう。 割り当て、呼び出し、インクリメント、デクリメント、待機、および新しいオブジェクトの式のみがステートメントとして使用できます 。 以下のように取得する方法がある。 // クラス名は ConsoleApplication1。 Type me = new System.Diagnostics.StackFrame().GetMethod().DeclaringType; // ConsoleApplication1.Program string className2 = me.ToString();

AsEnumerable() が使えない

イメージ
DataTable の定義にない 古いソース(.NET Framework 2.0 時代のもの)を改修する場合によくあるのだが、AsEnumerable メソッドは拡張されたメソッドであるため、プロジェクトの参照設定で System.Data.DataSetExtensions アセンブリを追加しなければならない。 アセンブリの追加を行えば、インテリセンスにも表示されるようになる。 DataTableExtensions.AsEnumerable メソッド - msdn https://msdn.microsoft.com/ja-jp/library/system.data.datatableextensions.asenumerable%28v=vs.110%29.aspx

MultiLine TextBox の Length は改行込みの長さ

イメージ
ASP.NET の TextBox を MultiLine に設定すると、以下のような挙動となる。 TextBox1.Text.Length 長さを取ろうとすると、テキストボックス内の改行を含めた長さを返す。 このような入力を行うと、TextBox1.Text.Length の戻り値は 7 となる。改行コードもカウントされているためだ。 TextBox の行数を取得 改行コードは機種によって依存するのだが、以下のような方法で行数を取得できる。 int linage = TextBox1.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None).Length; // 改行がなくても 1 のため。 linage--; Length で取得した文字数から行数を引けば、文字数のみ修得することができる。

DataTable の特定行を ラムダ式で検索・削除

DataTable の検索と削除 DataTable が未だに残っているシステムは多く、表題の表な細かい要望も作りによってはある。行を抽出するためには Select メソッドがあるが、これは場合によっては遅いので、改修するならラムダ式で検索し、その行を削除する書き方をしたほうが良い。 DataTable dt = new DataTable(); dt.Columns.Add("ProductCd", typeof(string)); DataRow dr1 = dt.NewRow(); dr1["ProductCd"] = "HGE-10"; dt.Rows.Add(dr1); DataRow dr2 = dt.NewRow(); dr2["ProductCd"] = "HOG-20"; dt.Rows.Add(dr2); DataRow dr3 = dt.NewRow(); dr3["ProductCd"] = "HGH-20"; dt.Rows.Add(dr3); DataRow[] dr = dt.AsEnumerable().Where(x => x.Field<string>("ProductCd").EndsWith("10")).ToArray(); // この書き方も可能。 //Array.ForEach (dr, r => dt.Rows.Remove(r)); foreach (DataRow r in dr) { dt.Rows.Remove(r); }