checkpoint

自分用のIT技術系ノートです。古い情報や間違っている情報もあるので注意。

.NET

リフレクションを使って(ジェネリック)メソッドを実行する

public static string TestMethod1(int input) { return "Test Method 1 : " + input.ToString(); } がProgramクラスにある場合、これをリフレクションを使って呼び出すには var mi = typeof(Program).GetMethod("TestMethod1"); var ret = mi.Invoke(null, …

ClickOnceで起動時エラー

(問題) このアプリケーションをインストールまたは実行できません。このアプリケーションでは、まずグロバール アセンブリ キャッシュ(GAC)にアセンブリ <名前・バージョン> をインストールする必要があります。このアプリケーションをインストールまたは…

(v1.1対象)StringDictinaryのKeyは強制的に小文字にされる

久しぶりにメモっぽくブログ更新。 StringDictionary クラス (System.Collections.Specialized)は、Stringを扱うDictionaryが必要な場合に使ったりします。 Hashtable クラス (System.Collections)と違ってキャストが必要ないから。しかしここで思わぬ落とし…

FakeWorkTable

SQL Server 2005 + .NETアプリでこんなエラーが出たよ! System.Data.SqlClient.SqlException: 4 バイトの内部オーバーヘッドを含めて、最小行サイズが 16017 になるので、テーブル 'FakeWorkTable' を作成または変更できませんでした。このサイズは、テーブ…

FlagsAttributeの使い方

列挙型にFlagsAttributeを付与すると、フラグとして扱うことができます。 [Flags] public enum Color { Red = 1, Blue = 2, Yellow = 4, Green = 8, } 値は2の累乗になるようにします。フラグの立て方。(RedおよびBlue) Color c = Color.Red | Color.Blue…

Convert.Int32(String)とInt32.Parse(String)

文字列を整数に変換したい場合に用いるメソッド二種類。 どう違うのかぱっと見分かりません。MSDNのConvert.Int32の項を見てみると… 戻り値は、value に対して Int32.Parse メソッドを呼び出した結果得られる値です。 とのことなので、内部的にはInt32.Parse…

ADO(.NET) + SQL Serverでパラメータークエリを使った場合、ローカル一時テーブルが作成出来ない

最近職場の人が言っていた件。自分も前にこれでかなり悩んだものです。 PRB: ADO のパラメーター化されたクエリを使用すると SQL Server のローカル一時テーブルが作成されません。 ADO.NET 1.1 でも再現するこの現象。例えば以下のようなパラメータークエリ…

メソッドのオーバーロード作成時にありがちなバグ

例えば、下の様なメソッドがあって public void ExampleMethod(string param1, int param2) { (省略) } これに、引数が「param1」だけのオーバーロードを作るとします。 その場合正しくは、 public void ExampleMethod(string param1) { this.ExampleMetho…

usingを使え!

IDisposableインターフェイスを実装したオブジェクトを利用する際、usingステートメントを利用するのはもう常識ですね。usingが分からないC#プログラマはすぐにGoogle先生に聞いてください。数分でわかるはずです。ジョエル・スポルスキー風に言うと「分かる…

ADO.NET経由でSQLがデッドロックになった場合、SqlCommand.ExecuteReaderメソッドがエラーにならないことがある件

やばい、これ今日初めて知ったんだけど。というか、このせいで半日くらい潰されました。MSDNにもしっかり書いてありますね。引用。 トランザクションがデッドロック状態になると、 Read が呼び出されるまで、例外はスローされない可能性があります。 Framewo…

framework1.1で構成ファイルにカスタムセクションを設定

App.configとかWeb.configとかに好きな形式で好きな設定を好きに設定したい。そのような場合にはIConfigurationSectionHandlerを実装したクラスを作りましょう。Createメソッド一個を実装すればいいので簡単じゃよね!section引数に指定したセクションのXmlN…

XmlSerializerで作成したXMLを加工してからファイルに書きこみたい

と、思ったので、XmlSerializer.Serializeメソッドの引数にMemoryStreamを放り込んでStreamReaderで読めばOKじゃよね! とか言いつつサンプルコードを書いてみたのですが、最終的にできあがったファイルに元オブジェクトの情報が全然書き込まれてませんでし…

(メモ)引数の名前を取得する

System.Reflection.MethodBase.GetCurrentMethod().GetParameters()

WindowsフォームのShowとShowDialogの違いについて

今更感たっぷりですが、Showの場合はフォームを閉じるとDisposeメソッドが呼ばれ、 ShowDialogの場合はフォームを閉じてもDisposeメソッドは呼ばれません。結局はusingを使えということで。

基になるRCWから分割されたCOMオブジェクトを使うことはできません

COMオブジェクトの解放後に何らかの操作をしようとした場合に発生。 たいていはCOMオブジェクトのリリースタイミングにバグがある。 そうでないなら、COMオブジェクトを生成したスレッドとは別のスレッドから使用しようとした際、作成元のスレッドが既に無く…

(VS2003).NETのソリューションをVSSのソース管理から外す方法。

1.ソリューションのフォルダ以下全てのファイルの読み取り専用属性を外す。 2.*.vssscc, *.vspscc, *.sccなどのファイルを全て削除 3.各プロジェクトファイルをテキストエディタで開き、以下の部分を削除。 SccProjectName = "???" SccLocalPath = "??…

オブジェクトの複製(ICloneable)

オブジェクトの複製(クローン)を作成したい場合、 別の変数に代入するのでは参照をコピーしているだけなので当然ダメ。 別のインスタンスを作成してフィールドの内容を全てコピーすればいいが、 手間がかかりすぎるし、変更に弱いので現実的な方法ではない…

コンストラクタからコンストラクタを呼ぶ

簡単なことですが、忘れがちになるので。コンストラクタから、オーバーロードされた コンストラクタを呼ぶ場合thisキーワードを使用する。 public class ExClass { public ExClass() { //処理A } public ExClass(string paramOne) : this() { //処理B //この…

foreachと構造体

.NETの構造体は値型。これ基本。 しかし油断しているとつい下記のようなことをしてしまう。 //構造体 public struct ExampleStruct { public int Number { //get,set... } private int number; }//構造体利用側 ... private ExampleStruct[] exstrArray = ne…

条件付きコンパイル

プロジェクトのプロパティから条件付コンパイル定数を設定。 (既定でDEBUGとTRACEは入ってる) #if DEBUG //Code for debug #elif TRACE //Code for trace #else //Code for release #endif こんな感じでOK。ネストもできる。 メソッドまるごと条件付にした…