たぷつきません

おなかがでてきた。もうたぷついてるやん。

C#

CompareOptionsの説明がドイヒー

C#

書いていること守って組み合わせているのに、optionsの値がダメーというArgumentException が発生するので1つ1つ組み合わせたところ、ようやく理解。 まずCompareOptionsは以下の定義。ビットの組み合わせで指定できるとなっている。 [Flags] public enum …

リリースで無かった事にされるコード

C#

以下のようなのを書いていたんだけど、リリースビルドしたら、式の評価がまるごとなされなくなって大変なことに。 System.Diagnostics.Debug.Print("permissions=" + (permissions = session.CheckPermissions())); 上記処理では、あるケースでは session.Ch…

アンチパターン

C#

もーなんだよー。Processは p.StandardOutput.EndOfStreamとかロック上等なので絶対見ちゃダメ。よくよく見れば、p.OutputDataReceived、p.ErrorDataReceivedというちゃんとしたイベントハンドラが用意されているじゃなぁ〜い! ぐぐって上位に来るのがアン…

なぜかデッドロック

C#

標準入力と標準出力それぞれにReadToEndしているスレッドをスタートさせてから、process.WaitForExit();してプロセスが終わっただろうから、readStdOutThread.join() とかしているんだけどたまにReadToEndから復旧しない。 ググったら。こんな情報が。http:/…

また忘れていたのでメモ

C#

久々にC#を触るとまた色々忘れていたことに気付く。Timer使うときはTimerじゃなく、DispatcherTimerだった。タイマーイベント内でコントロールなどの資源を参照しようとすると、他のスレッドの持ち物なのでうんぬんかんぬんというエラーが出るのでDispatcher…

演算子オーバーライドしたオブジェクトをnullで比較すると「次のメソッドまたはプロパティ間で呼び出しが不適切です」となる

C#

== と != をオーバーロードしたクラスがあって、そのインスタンスを == null で比較すると次のようなビルドエラーが出る。 次のメソッドまたはプロパティ間で呼び出しが不適切です: 'MyClass.operator == (MyClass, object)' と 'MyClass.operator == (objec…

"Shell IDList Array"じゃなくて、DataFormats.FileDrop

C#

DragEventArgs.Data.GetData()の話。"Shell IDList Array"でMemoryStreamをとってセッセと昔ながらにSHGetPathFromIDListを読んでいってstringを返す関数を作ってしまった。しかもユニコード文字が含まれているファイル名が?になっちゃうし((ピンボケをワイ…

どこに消えたかIsReadOnly

C#

とても不思議な現象にあっている。List は IList を実装していて、IListはICollectionの継承。でICollectionにあるはずのIsReadOnlyが、Listからは呼び出せない。 List<string> list = new List<string>(); bool a = list.IsReadOnly; // ← そんな定義は見つからないというコ</string></string>…

NaNを比較しちゃいけない

C#

value == double.NaN だとダメで、 double.IsNaN(value) じゃないと引っかからない。

百発百中

C#

今日は C# 2008 Expresss の終了時にプロセスが死んで送信しますか?と百発百中いわれる。快適なiMacなのにフォームエディタも設定エディタも激重。そしてフォームエディタがたまに死ぬ。でかいソリューションとはいえ酷いなぁ。

汎用Delegate

C#

System.Action というのがあったのか〜。なんだ〜。今まで都度定義していたよ。今回のプロジェクトは3.5だから全部Actionに置き換えよっと。

XMLのネストでけた

C#

昨日のつづき。IDictionary> 相当のものを作成してXMLシリアライズできるようになった。こんなの。 public class ClassAttributes { public ClassAttributes() { ClassNames = new StringCollection(); Attributes = new List<Attributes>(); } public StringCollection </attributes>…

ジェネリックス

C#

Javaでいうところの、Class 相当のものが欲しい。制約条件をこんな感じで拡張してもらいたい。 T loadXml<T, TT>(TT type) where TT: typeof(T) 追記 ↑は全然的外れで、制約条件にするどころかそもそもTTなんて引数が要らないことが分かりました。理解に至ったのは</t,>…

ユーザー定義のコンフィグレーション

C#

昨日から色々試行錯誤中。やりたいことは、XmlブロックがネストするNameValueCollectionの保存・復元。たぶん http://msdn.microsoft.com/ja-jp/library/system.configuration.configurationconverterbase.aspx がゴールかとは思うが。 Xmlでの保存([global:…

ネームスペース指定いろいろ

C#

自身のネームスペースからの相対クラス名と他のライブラリのルートのネームスペースが被ってしまい、どうすりゃいいのか保留していたけど、自動生成されるSettings.csをいじっていて解決方法を知った。 絶対指定するためには、global:: をつければ良くて、こ…

おもしろい

C#

System.Linqをusingするかしないかだけで、配列オブジェクトのメソッドが増減する。おもしろい。 C#3.0から(というかVS2008から)の拡張メソッドの好例です。簡潔なまとめがこちらにあります。

たのしい

C#

2.0、3.0とすすむにつれてギミックがどんどん増えてますねー。いじるだけいじった感じ。Null許容型やNull合体演算子は?が「ヌルかも?」と言ってるように見えてかわいい。エスケープ不要なヒアストリングとか(バージョンいつからか知らないけど)。ラムダ式…

デスクトップ作業領域

C#

サイドバー的なもののために操作をしたが他のウィンドウが最大化するのを合わせられないなーと思ったら、SystemParamerterInfoじゃ足りなさすぎで、ちゃんとSHAppBar関連のAPIとメッセージ応答するWndProcを書かなきゃならんかったのであった。久々すぎてそ…