atsukanrockのブログ

Microsoft系技術を中心にぼちぼち更新します

.NET

Windowsフォームアプリケーションでリソースリークしないために(2)

連載記事にするつもりが、第1回のみ公開して第2回は下書きに放置していた。第2回が書きかけだからだが、当時のことをほぼ完全に忘れているので書き切れそうにない。なのでエイヤッと公開しておく。このあとControl.InvokeやBeginInvokeに関する話(この辺と…

Nullableと3値論理

.NETのNullableの比較について記憶できないのでメモ。 nullと非nullの比較 int? value1 = null; int? value2 = 10; だと 式 結果 value1 false value1 false value1 == value2 false value1 != value2 true value1 > value2 false value1 >= value2 false nu…

Windowsフォームアプリケーションでリソースリークしないために(1)

最近になって初めて*1、本格的なWindowsフォームアプリケーションを開発した。その中でいくつかリソースリークしやすいポイントを見つけたので記録する。書いてみるとかなりの分量になったので、分割することにした。本エントリはその第1回。 Windowsフォー…

IronPythonでプログラミング可能なCONFIGファイルを実装する

はじめに IronPythonを使えば、CONFIGファイルで自由にプログラミング可能なアプリケーションを、実装できる。本エントリでは、その方法を簡単に紹介する。

DataTableの一部の列でのDistinct

DataTableの一部の列でDistinctするコードを書いたので、記録しておく。

.NETの正規表現は国際化対応(?)している

はじめに .NETの正規表現[MSDN]の正規表現が、国際化対応か何か良く分からないが、私にとっては少し意外な動作をすることを発見した。その動作を記録し、私なりのルールを示す。なお、以降の記述では、正規表現のパターンを示す場合、//のように記述する。

LinqのWhereでの列挙中に、列挙を中断できる

IEnumerableを返すためにyield returnを使うコードを、最近になって初めて実践的に使った。するとあることに気付いた。次のコード、yieldに慣れていないとどう動くか予想しづらいのではないか。 int count = 0; var array = new object[100]; foreach (var o…

Nullableはまあまあ賢い

はじめに System.Nullable<T>は、まあまあ賢い。まあまあ賢いとはどういうことかというと、予想したとおり動作してくれる。具体的には、 nullとの比較 ボックス化 が、予想したとおり動作する。</t>

0.00001.ToString()は"1E-05"

標記のとおり、 System.Single(C#ではfloat) System.Double(C#ではdouble) の、ToString()メソッドの戻り値は、値によっては指数表記となる。ドキュメントにも明記されているのだが、その説明は非常にわかりづらい。おそらく、固定小数点表記と指数表記…

.NETで、桁数と精度を指定してランダムな数値を生成する

はじめに 桁数と精度を指定してランダムな数値を生成するメソッドの、.NET(C#)での実装例を示す。

.NET Frameworkで、シリアル化可能なタイプセーフenumを実装する - その3(今度こそ完成?)

はじめに 昨日のエントリに対して、またもやid:zeclさんに言及いただいた。以下にその言及内容を引用する。 そうですよね。IObjectReferenceインターフェイスを利用すれば、静的クラスのシングルトンが表現できますものね。ちなみに、IObjectReferenceインタ…

.NET Frameworkで、シリアル化可能なタイプセーフenumを実装する - その2

はじめに 以前のエントリで、今の.NET Frameworkでは、シリアル化可能なタイプセーフenumを、スマートに実装する方法はないのではないか、と述べた。それに対し、ピコピコさんから「できるよ」というコメントをいただいた。そのアドバイスに従い実装してみた…

ODP.NETのバージョン問題

はじめに ADO.NETのOracle製接続プロバイダであるODP.NETには、バージョン問題が存在する。ここで言うバージョン問題とは、アプリケーションの開発者が意図しないバージョンのODP.NETが、アプリケーションの実行時に使用されてしまうことを指す。本エントリ…

DataTableでのロールバックを手軽に実装する

DataTableは、ただのデータの入れ物ではない。CLRのメモリ上でDBのトランザクション(CRUDやコミット/ロールバックなど)と同様の処理を実装するための、各種メソッドが提供されている*1。ロールバックを実装するための方法も提供されている。しかしその仕…

.NET Frameworkで、シリアル化可能なタイプセーフenumを実装する

はじめに 本エントリでは、.NET Frameworkでシリアル化可能なタイプセーフenumを実装する方法を述べる。 結論から先に述べると、今の私にはそのうまい方法が思いつかなかった。今の.NET Frameworkでは、泥臭くしか実装できないのではないか。その考えにいた…

CollectionやReadOnlyCollectionで、リストのプロパティを公開する

はじめに 本エントリでは、.NET 2.0以降でリストのプロパティを公開する*1場合に使用する、以下のクラスについて述べる。 Collection<T> ReadOnlyCollection<T> *1:publicまたはprotected。internalを「公開」とするかどうかは人によるかもしれない</t></t>

DateTime.ParseExactメソッドで、1900年代の日時に変換される

.NETで文字列を日時の値に変換するには、DateTime.ParseExactメソッドを使用するのが普通だ。このメソッドは、第2引数に日付と時刻の書式指定文字列を指定する。その指定をカスタム DateTime 書式指定文字列とした場合、注意が必要だ。 年の解析でyy(年の下…

CSVパーサを実装中

今日は、.NETでCSVパーサを実装していた。.NETでCSVを手軽に扱いたいのであれば、TextFieldParserクラスというクラスがあるのだが、このクラスはMicrosoft.VisualBasic.FileIO名前空間に属するということで、使用するのは何となく気が引ける*1。 実装といっ…

Delegate(およびMulticastDelegate)はimmutable(不変)である

要旨 Delegate(およびMulticastDelegate)クラスのオブジェクトはimmutable(不変)である。immutableであるということは、スレッドセーフである(同一オブジェクトが複数スレッドからアクセスされても安全である)ということだ。 ちなみに イベントとなる…

データセットデザイナの機能と注意点

はじめに データセットデザイナは、Visual Studio(バージョンによらず)の目玉機能のひとつだろう。GUI操作によって、型付けされたデータセット(以降「型付データセット」と呼ぶ)のソースコードを自動生成することができる。本エントリでは、Visual Studi…

App.configやWeb.configを分割する

はじめに 本エントリでは、.NETアプリのconfigファイル ASP.NETの場合:Web.config デスクトップアプリの場合:App.config(実際のファイル名は.config) を分割する方法を示す。 方法 configSource属性を利用する。 configSource属性の特徴 以下に、configS…

DefaultValue属性の使われ方

カスタムコントロールを作成する際、プロパティの既定値を指定するためには、プロパティにDefaultValue属性を適用する。ただし、このプロパティが使われるうのは、以下の局面に限られる。 Visual Studioのデザイナが、プロパティウィンドウを表示するとき Vi…