OITA: Oika's Information Technological Activities

@oika 情報技術的活動日誌。

.NET

C# 三項演算子をswitch文の代わりとして使用する

小ネタ。 三項演算子(条件演算子?)は可視性がいまいちだとかで嫌われてる気がするけど うまく使えば簡単なswitch文の代わりにだってなるし、むしろ見やすいと思うよ! という話。 まず、一般的によく使われるのは、↓こんなif文の代替にするケースか。 //i…

C# Clipboardクラスでクリップボードを監視するとSEHExceptionも発生する

前に「[C#]Clipboardクラスでクリップボードを監視するとComExceptionが発生する」って書いたんだけど、 ComExceptionを無視するようにして安心したのもつかの間、 今度はSEHExceptionってのが発生してきやがった@Windows 8.1(32bit)。

「汝は人狼なりや? for Windows desktop」v1.1の機能追加

自分で遊びたくて作ったデスクトップ用人狼アプリですが 思いのほか息長く遊んでいただけているようでうれしい限りです。 たまに思い出したように機能追加したりしてたんで、 まとめてちょこっとお知らせ。

WPF Windows8で実行された際にポップアップが左右逆に出るのを防ぐ

前回書いてた問題、解決策が見つかったぜはっはー。 さすがはstackoverflowやー。 [WPF]文字列が表示領域に入りきらないときにポップアップで全文を表示する ↑の記事の最後に書いたとおり、 WPFのPopUpとかToolTipのPlacementの設定と、 Windows8のタブレッ…

WPF 文字列が表示領域に入りきらないときにポップアップで全文を表示する

WPFでの実装サンプル。 アプリの画面上で表示領域に文字列が表示しきれない場合に オンマウスで全文がポップアップ表示されるやつ。 ↑こういうやつ。 ポップアップと書いたけど、実際の実装はToolTipを使いました。 xamlのほうがスマートに書けそうな部分も…

WPF MVVMでDataGridのソートを扱うためのクラス設計

MVVM的な設計の中でDataGridのソート機能をどのように扱うかという話。 WPFのDataGridには標準で列ヘッダクリックによるソートの機能があるんだけども これをコードでも制御したいときに、ItemsSourceの中身はViewModel側にあるんだけど Viewでやるの?どう…

WPF DataGridColumnへのバインディング

DataGrid列のヘッダ表示内容とか列幅とか、Columnのプロパティに対して DataContext経由でViewModelのプロパティをバインドしようとすると 意外と一筋縄でいかないよという話。

C# 非公開メンバへアクセスするためのReflectionラッパーライブラリ「Merror」公開

privateなフィールドの値を外からいじったり、 protectedメソッドを外から使ったり、 privateコンストラクタしか持ってないクラスのインスタンスを作ったり、 そういう掟破りなことをするReflectionのメソッド群を いくらか直感的に使うためのラッパを作りま…

C# Clipboardクラスでクリップボードを監視するとComExceptionが発生する

先日公開したぺたこーだというソフトで クリップボードにコピーされた文字列をリアルタイムで画面表示する処理を 入れていたんだけど、似たようなツールを作って仕事で使っていたら、 ときどきComExceptionをはいて落ちることがあった。 クリップボード監視…

.NET 入れ子になった内部クラスの型をリフレクションで参照する

パブリックでないメンバやクラスにアクセスする手段として C#ではリフレクションのメソッド群が System.Reflection名前空間に用意されている。 たとえば、internalなクラスのprivateなメンバに 参照プロジェクトからアクセスするサンプルなこんな感じ。 アク…

C# DataSet/DataTableの値をキャストするかParseするか

以前、DataRowとNullの微妙な関係というのを書いたけど、 相変わらず、型なしDataSetの値の扱いは気難しいという話。 まずは、int型のカラムを一つだけ持つDataTableを用意して、 それ用の新規DataRowを作って、適当な値を入れる。 var dt = new DataTable()…

CLR/H 89回 ~Community Camp デイ!~に参加

clr/h様の第89回勉強会に、前半だけ参加。 今回はMicrosoft MVP Community Camp 2014の北海道会場という位置づけでございました。 各セッションについて簡単に感想を記録。 基調講演:スクリーンのその先へ インフラジスティックス・ジャパン東氏。LIVE中継…

NUnit 例外テストの評価をデバッガ上で実行できない問題

NUnitを使ってテストを書くときに テストコードのプロジェクトをコンソールアプリとかにしておいて Mainメソッドの中でGUI Runnerを呼び出すようにすれば いちいちNUnitを別で立ち上げずにexeからテストを開始できたり、 VisualStudio上でデバッガ実行できた…

CLR/H 88回 ~雪まつりデイ!~に参加

先週土曜はCLR/H様の勉強会に参加してきました。 当日はセッション3本立てでした。 ・簡単になった! クラウドベースの動画配信アプリ開発。 ・最新Web アプリケーションパターンと .NET ・LightNode Demystified - How to Make Extreme Fast Owin Framework …

C# WeakEventManagerがFatalExecutionEngineError(0x80131623)を投げるケース

「弱いイベント」(Weak Event)パターンで WeakEventManagerを継承したクラスが以下のようなエラーを投げて びっくりしたのでメモ。 ランタイムの重大なエラーが発生しました。エラーのアドレスは 0xXXXXXXXX、スレッド 0xXXXX です。エラー コードは 0x801…

C# List<T>もIList<T>も配列も公開しない

以前書いた、を公開してはいけないという話">FxCop:Listを公開してはいけないという話について、 最近はもうちょっと自分的にしっくりくる書き方が見つかったよという成長記録。

C# IEnumerable.Castメソッドでint→longはできない

表題のとおり。 LINQのCastでint→longとかint→shortとか、 その他数値間のキャストをしようとすると InvalidCastExceptionで落ちる。最近知った。 OfType()だとエラーにはならないが、要素が1つも返ってこない。 コードは以下。 int[] ints = new [] { 1, 2,…

C# HostToNetworkOrderとNetworkToHostOrderの違い

C#では、リトルエンディアンとビッグエンディアンの バイト変換用メソッドとして、System.Net.IPAddressクラスに HostToNetworkOrderとNetworkToHostOrderを持っている。 コンピューターの配列順からネットワーク用の配列順(ビッグエンディアン)に 数値を…

オープンソースカンファレンス2013 Hokkaidoに参加しました

2013.09.14、お邪魔してきました。OSC2013@北海道。 朝から参加したセッションの内容と感想まとめ。 「オープンソースソフトウェアの翻訳をやらないか」 @okano_tさん。 LibreOfficeを例に、オープンソースソフトウェアの 翻訳活動についての紹介とライブコ…

「汝は人狼なりや? for Windows desktop」公開

パソコンとモニタを使って人狼を遊ぶためのWindowsデスクトップアプリです。 もともと自分が人狼という遊びをやってみたくて作って内輪で遊んでたものなんですが、 テレビ番組にもなってなんだか人気沸騰中の人狼ゲームなので いくらか需要もあるかなと思っ…

WPF 特定のリソースの組み合わせでビルドが通らなくなるバグ

よっぽど変な勘違いをしていなければ、VisualStudio(MSBuild?)のバグだと思われる話。 再現環境は.NET 4.0, VS2010のC# Express。 あと.NET 4.5, VS Express 2012のfor Desktopでもやっぱり再現した。 正常に動作していたコードで、唐突にビルドが通らな…

C# リフレクションによるメンバの列挙順を指定する

先日Enumeratorを使って自前オブジェクトのメンバを列挙するという話をしていたが、 この中の、リフレクションを使ってメンバを自動で列挙しようという話、 実は、列挙されるメンバの順序が不定だという問題がある。 以下はMSDNの記述。 GetProperties メソ…

DataRowとNullの微妙な関係

ADO.NETのDataAdapterとかを使おうとすると、DataSetやDataTable経由で DataRowの値をいじる処理が絡むことが多いと思うが、 このクラスはNull値に関してちょっと直感的でない動きをする。

Enumeratorを使って自前オブジェクトのメンバを列挙する

javaでのtoString()って、C#のToString()よりもデバッグ用的な意味合いが 強いのかなという感じがする。 javadocを見ると、以下のように書いてある。 通常、toString メソッドはこのオブジェクトを「テキストで表現する」文字列を返します。この結果は、人間…

DictionaryをJavaのHashMapライクに使用する

Javaプログラマに、JavaのHashMapに比べてC#のDictionaryは使いにくいと言われたんです。 Mapは存在しないキーでget()したらnullを返してくれるのに、 C#のDictionaryはKeyNotFoundExceptionを返しやがる。 しかも例外処理が重いからいちいちTryGetValueしな…

続・.NETでPathをちゃんと

先日アプリケーションのStartupPathをちゃんと取得するという話を書いたのだけど、 たかがPath、されどPath、ちゃんとやろうとすると なかなか奥が深いというか面倒くさいので、もうちょっと書きます。 けっこう長くなったけど、トピックスは2つ。 ・絶対パ…

ListBoxのItemsSource, SelectedItemへのBindingでバグ?

表題のとおり、WPFのListBoxで、ItemsSourceとSelectedItemを それぞれバインディング経由で使っていたときに、 バグといっていいかもしれない不具合があったので、一応メモ。 ちなみに手元の環境だと、.NET Framework 4.5では再現せず、 4.0だと再現するPC…

sqlite-netを使ってMonoでSQLiteを利用する

これまでC#からSQLiteを使うときはSystem.Data.SQLiteを使っていたのだけど、 実はLinuxのMonoで使えねぇよって話だったので*1、代わりを探してました。 ちょっと調べた感じだとMono.Data.Sqliteってのを使っている人が多いみたいだったが なんかダウンロー…

Mono実行下でXElement.SetElementValueにバグ

.NET 4.0のアプリで、Monoを使ってLinuxで動かしたときに たまたまMonoのバグがあってはまったのでメモ。 LINQ to XMLの話になるのかな。

Directory.EnumerateFilesしながらファイルを増やすとどうなるか

.NET Framework 4で、配列を返すDirectory.GetFilesメソッドの代わりになる、 IEnumerableを返すDirectory.EnumerateFilesというメソッドが追加された。 GetFilesでは、すべてのファイルの検索を終えてから配列を作る必要があったのに対し、 EnumerateFiles…