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 の戻り値は 7 となる。改行コードもカウントされているためだ。
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); }
登録:
投稿 (Atom)