No more Death March

あるSEのチラシの裏 C# WPF

C#

WPF TextBoxの不思議な挙動

忘れる前にメモしておく。上位からみてScrollViewer→StackPanel→Grid→TextBoxの順にビジュアルーツリーを構成し、横スクロール可能な状態でGridの列をStar指定で分割、TextBoxにテキストを入力しつづけて割り当てられたサイズを超えると指定した幅を無視して…

C# ObservableCollectionに対する操作とCollectionChangedイベントの内容

C#

INotifyCollectionChangedインターフェースのCollectionChangedイベントについてMSDNの記述だけだとどういう通知が来るのかわからなかったのでプログラムを書いて確認してみた。MSDNのページは以下docs.microsoft.com 確認用のプログラム Visual Stu…

StackOverFlowExceptionの原因

C#

忘れないうちにもう一つ、ほとんどが記述ミスによるメソッドやプロパティの無限ループが原因だが、 Linqの遅延評価が多用されている場合も呼び出し時に発生することがある。自分の場合、かなり頻度の高い処理の中で 同じ変数にLinqの遅延評価される戻り値を…

WPFの描画関係メモ

描画関係、仕事では滅多に使わないのだけど、 その分毎回忘れてしまうのでこの記事でメモ とにかく線を引いてみる 複数の線を引く 円・楕円 四角形 塗りつぶし 交差部分の塗りつぶし 交差部分の塗りつぶし(CombinedGeometry) とにかく線を引いてみる Line…

C# 正規表現の基礎をメモ

C#

Regexクラス 使用例 Regexクラス ・C#で正規表現を使う場合はRegexを使う。 ・コンストラクタでパターン文字列を指定する。 ・IsMatch(String)メソッド(戻り値bool)で正規表現と一致するかどうかを取得する。Regex クラス (System.Text.RegularExpressions…

c# enumをDictionaryのキーにした場合のパフォーマンス

3年以上の前の記事ですが、参考にさせていただき調べてみました。proprogrammer.hatenadiary.jp要約するとintへのキャストは高速だけどGetHashCodeの実装は低速とのこと。 あまり厳密なテストをしたわけではないですが、.Net Framework4.6の環境で試してみ…

アダプターパターン

Gofデザインパターンの復習でアダプターパターンについて書きます。 書籍等で見ると最初は混乱したのですが、覚えるとデコレーターパターン同様、シンプルなパターンだと思います。 アダプターパターンとは アダプターパターンの構成 適合させたい型 アダプ…

デコレーターパターン

Gofデザインパターンの一つ、デコレーターパターンについて復習します。 デコレーターパターンは比較的簡単で、デザインパターンの中で一番最初に覚えたパターンでした。 再利用しやすいコードを書く上で今でも欠かせないパターンだと思います。 デコレータ…

WPFで帳票 参考リンク

ネットで色々検索してみるとWPFでも帳票印刷が出来るらしい。 後で参考に出来そうなリンクをメモ以下参考: WPFでの印刷の基本(1) 単一ページの印刷 - Qiita WPFでの印刷の基本(2) 複数ページの印刷 - Qiita WPFを帳票フレームワークとして使う - @kotyの…

C# 月初日

C#

public DateTime MonthFirstDate(DateTime value) { return new DateTime(value.Year, value.Month, 1); } DateTimeのコンストラクタの日にち部分に1を渡す。

C# 月末日

C#

public DateTime ToMonthLastDate(DateTime value) { return new DateTime(value.Year, value.Month, DateTime.DaysInMonth(value.Year, value.Month)); } 年と月はそのまま、日にちだけDateTimeクラスのDaysInMonthメソッドに年と月を渡してやる。 VB6の時…

インターフェースを考える(5)IAction その2

前回に続きIActionについて考える。 IPredicateやITaskと同じように組み合わせ用にCompositeActionクラスを作る。 using System; using System.Collections.Generic; namespace Nmdm.Actions { public sealed class CompositeAction<TContext> : IAction<TContext> { public Comp</tcontext></tcontext>…

インターフェースを考える(4)IAction

C#実践開発手法よりIActionインターフェースです。 namespace Nmdm.Actions { public interface IAction<TContext> { void Do(TContext context); } } 単一の引数を受け取る戻り値の無いインターフェースで、 引数は型パラメータで指定出来る・・・と使いどころはどこ</tcontext>…

インターフェースを考える(2)ITaskインターフェース

C#実践開発手法で紹介されているもっとも単純なインターフェースITaskを作ってみます。 namespace Nmdm.Tasks { public interface ITask { void Do(); } } 引数も無く、戻り値もなく、最もシンプルなインターフェースですね。こういうインターフェースを作る…

インターフェースを考える(1)はじめに

オブジェクト指向プログラミングを勉強していると 実装ではなく抽象に依存する というフレーズを目にすることがあります。このカテゴリの記事では私自身の勉強のために、 とことんインターフェースを使ってみたらどうなるか、 実際にプログラミングしながら…

c# リファクタリング 小さい方の値が欲しい。

二つのint型から小さい方の値がほしい時。 public void Hoge(int one,int other) { int min; if (one < other) { min = one; } else { min = other; } } じゃなくて。MathクラスのMinメソッドを使おう。 public void Hoge(int one,int other) { int min; min…

C# 自作クラスの戻り値からnullを排除する。

C#

自作クラスのプロパティやメソッドでなんらかの値を返すならnullは返さないようにしたい。 そのクラス自体のnullチェックを他のクラスがするのはわかるとして、 クラスが公開する「何か」についてはそのクラスが責任を持つべき。string型のプロパティがある…

C# リファクタリング コレクションを変換

コレクションの内容を一定のルールに従って違う型に変換したい場合 public void Hoge() { var list = new List<object>(); list.Add(new object()); list.Add(new object()); list.Add(new object()); list.Add(new object()); list.Add(new object()); var list2 = </object>…

C# リファクタリング foreachで抽出

Listをぐるぐる回して条件に合致するものを別のインスタンスに入れている場合 public void Hoge() { var list = new List<String>(); list.Add("123"); list.Add("1234"); list.Add("12345"); list.Add("123456"); // 4文字以下のものをリストから抽出したい。 var l</string>…

C# リファクタリング コレクションを返すメソッド

なんらかの処理を行ってコレクションを返すようなメソッドがあったとして、 こんな具合にパラメータがnullだったら例外を投げ返すんだったら public IEnumerable<object> Hoge(object obj) { if (obj == null) throw new ArgumentNullException("obj"); // なにか処</object>…

C# リファクタリング 早期リターン

int型の引数が5以下だったらTrueを返すとして、 public bool Hoge(int value) { if(value < 5) { return true; }else{ return false; } } こうだったのを public bool Hoge(int value) { if (value < 5) return true; return false; } こうする。ソースコー…

C# ドメインイベントの実装 つづき

C#

前回のエントリーの続きから nomoredeathmarch.hatenablog.com Publisherクラスのメソッドについて記述まずSubscribeメソッドから public static void Subscribe(ISubscriber subscriber) { try { Mutex.WaitOne(); if (subscriber == null) throw new Argum…

C# ドメインイベントの実装

C#

こちらの書籍の第8章で紹介されているパターン 通常のイベントハンドラを使わずにクラスをイベントに見立て、クラス間の結合を弱める。実践ドメイン駆動設計作者: ヴァーン・ヴァーノン出版社/メーカー: 翔泳社発売日: 2015/03/19メディア: Kindle版この商…

C# 拡張メソッドについてメモ

C#

拡張メソッド (C# プログラミング ガイド)拡張メソッドは別クラスで宣言した静的なメソッドをインスタンスメソッドのように記述出来るもの。まずは拡張メソッドでメソッドで追加するクラス namespace Nmdm { public sealed class Hoge { } } そして拡張メソ…