C#

NPOIを使ってみた

JAVAのPOIが移植されたNPOIというものがあるということを、下記のブログで知った。 C#やVBでExcelを出力するために、POIの.NET版が無いか探してみたら、NPOIというものを見つけたので試してみます!! そこで、早速使ってみたので、気をつける必要がある点だ…

要素の数と内容が決まっている配列を作成する時、より変更に強いコードとは?

下記のような、二つのコードがあるとする。ケース1:配列を宣言してから代入する。 var sample = new string[3]; sample[0] = "abc"; sample[1] = "def"; sample[2] = "ghi"; ケース2:宣言時に要素も設定する。 var sample = new string[] { "abc" ,"def" ,"g…

Formを閉じる時だけValidatingイベント内での検証をやめる方法

フォームに貼り付けたコントロールのValidatingイベントハンドラ内で if(!this.CauseValidation && this.ActiveControl == 元のコントロール) { return; } if (!this.ActiveControl.CausesValidation) { return; } とする。 ×ボタンで閉じる時は、元のコント…

アセンブリから特定のインタフェースを実装したクラスのメタデータを取得する方法

アセンブリから特定のインタフェースを実装したクラスのメタデータを取得したい時は、System.Type型のGetInterfaceメソッドを利用します。 Assembly assemblyObject = Assembly.LoadFile(対象ファイル名); foreach (System.Type targetType in assemblyObjec…

アセンブリから特定の型を継承したクラスのメタデータを取得する方法

アセンブリから特定の型を継承したクラスのメタデータを取得したい時は、System.Type型のIsSubclassOfメソッドを利用します。以下のように使います。 Assembly assemblyObject = Assembly.LoadFile(対象ファイル名); foreach(System.Type targetType in asse…

Generic型を動的に生成する方法

WCFを利用したサービスのバックグラウンドで動いてもらうフレームワークを作成するときに必要だったので調べてみると、System.Type型のメソッドにMakeGenricTypeという、そのままのメソッドがあってこれで作成できる事がわかりました。 そこで、ここではList…

凄く便利で分かりやすいのに、見た目だけで保守派に嫌われそうな??演算子

C#

?? 演算子 (C# リファレンス)?? 演算子は、左側のオペランドが null 値でない場合にはこのオペランドを返し、null 値である場合には右側のオペランドを返します。 ??演算子は下記、サンプルのようなコードの場合、aがnullなら0を返す。という動作をします。 …

匿名メソッドで再帰を実装する時

通常匿名メソッドを実装する時は、宣言と代入が同じになるパターンが多い。 例えば、下記のコードのように。 public void 匿名メソッドで再帰() { Func<int, bool> カウントダウン = (x) => { if (x == 0) { return true; } Console.WriteLine(x); x--; return カウント</int,>…

パズル:nまでの整数を二つの組に分けて合計した結果が同じ時のnについて見つけた法則の実証をバイナリサーチで

C#

なんでそうなのかをコンピュータによる実証以外に証明する事ができないので、ドラクエで言うと、まだ冒険の書を作ったところ。いや、冒険の書すら作れていないのか。 最近、続けている話題ですが、とりあえず見つけた法則が正しいのかどうかを実証するために…

パズル:nまでの整数を二つの組に分けて合計した結果が同じだった2番目と3番目を出力する その2

C#

問題:1からnまでの整数を二つの組に分けて合計した結果が同じだった2番目と3番目を出力する。 出力された値を眺めていたら、どうも法則があることが分かった。 3は例外として、それ以降の値については、常に前回値×6-(前々回値-2)となるっぽい。 多分、知っ…

パズル:nまでの整数を二つの組に分けて合計した結果が同じだった2番目と3番目を出力する

問題:1からnまでの整数を二つの組に分けて合計した結果が同じだった2番目と3番目を出力する。 public void nまでの整数を二つの組に分けて合計した結果が同じだった2番目と3番目() { //Enumerable.Select().Sum()は使わない方向で Func<int, int, int> xからyまでの計 = (in</int,>…

超今更な話だけどGenericの型パラメータの制約は便利だ

最近、Genericを利用したクラスを作成する機会があった。 もともと、以下のような感じのGenericを利用していないクラスがあったのをGenericに対応した。 public abstract class ほにゃAbstract { public ほにゃAbstract() { } public abstract DataTable Tab…

拡張メソッドを使ってみる

拡張メソッドを使ってみたかったので、ちょっと遊んでみます。 以前、LINQを利用して、読みやすいコードを書くサンプルとして以下のようなコードを提示していました。 class 在庫計 { public int 数量計 { get; set; } public int 金額計 { get; set; } } pu…

LINQのGroupJoinを使ってみる

LINQに普通のJoinのほかにGroupJoinという機能がありますので、ちょっと使って遊んでみました。通常のJoinの場合 var 商品リスト = new[] { new { 商品番号 = "A", 商品名 = "鼻毛カッター" }, new { 商品番号 = "B", 商品名 = "安全ハサミ" }, new { 商品番…

読みやすいコードのためにLINQを利用する。

最初に断っておきたいこと C#3.0の話です。 LINQやラムダ式自体の説明はしていません。 簡単なサンプルにするため仕様がシンプルで効果を感じられないかもしれませんが、 もしもっと複雑な仕様だったら等、想像してみてください。まず最初に、下記のサンプル…

ラムダ式の=>演算子の読み方。(訂正しました)

ラムダ式の=>演算子(らむだえんざんし)をどう発音するのかわからなかったのですが、ちゃんとリファレンスに載ってました。 「goes to」と読むんですね。 ということで、 x => x + 1;はx goes to x plus one.と読むんだそうで、どうでもいいことですが・・・…

読みやすいコードを書くためにFunc型と匿名メソッドを利用する。

最初に断っておきたいこと C#3.0の話です。 Func型や匿名メソッド自体の説明はしていません。まず最初に、私が考える読みやすいコードの要素について断片的に提示します。 1.処理のスコープを最小にする。 2.今、読みたい粒度のコードしか読まなくても良…

参照型にrefキーワードがついている時とついていない時の違い

メソッドを定義するときに、refキーワードを参照型に付けたときと付けなかったときの違いは、簡単に言えば・・・ ・ref付きは参照する場所を変更出来る。 ・ref無しは参照する場所を変更出来ない。 ・両方とも、参照先のオブジェクトが持った値を変更する事…