秘密結社ぎゅう☆ぎゅう倶楽部でタグ「C#」が付けられているもの

 とあるアプリケーションが、MacのSafariで正常に動作しないという報告がクライアントからありました。

 多少条件判定処理が多いくらいで、それ以外はどう考えてもごくごく普通の処理をしているだけの個所なのに、確かに動作がおかしかったので、前回のエントリーで書いたSilverlightとJavaScriptの連携を使ってログを吐きつつ調査をしてみたところ、恐ろしいことに気づいてしまいました。

 double型って==演算子で比較しちゃダメなの?(´・ω・`)

 明らかに等しいdouble値の==演算子の比較が常にfalseになっているようだったので、試しにEqualsで比較するようにしてみたら、正常に動作するようになりました。
 確かにEqualsメソッドもあるけど、別に==で比較しても良いんじゃないの?ヽ(`Д´)ノ
 何も明らかに等しい値を、しかもMacのSafariだけでスルーしなくても良いと思う(´;ω;`)

 ということで、今後はdouble型の比較には、==演算子じゃなくてEqualsメソッドを使いましょう、というお話しでした。

 でも忘れちゃいそうだなー( ;^ω^)

 数値を表す文字列を数値に変換したい場合は、各数値型クラスのスタティックメソッド「Parse」を使用すれば良いわけですが、文字列が"FFFF"とか"F3C8"(←これにピンと来た人はおっさん)みたいに、16進数表記だった場合はどうすればいいんだろうという部分で行き詰まってしまいました。

 最初は、VBのValやCInt的なノリで、int.Parse("0xFF");とかやってみたのですが、残念ながらうまくいかず、調べたところ、オーバーロードされたParseの第二引数"NumberStyles"に秘密があったようです。
 いろいろなスタイルを指定できるようですが、16進数表記の文字列を変換する場合は、"NumberStyles.AllowHexSpecifier"を指定すれば良いようです。

int num = int.Parse("FF",NumberStyles.AllowHexSpecifier);

 上記の例でわかる通り、文字列には16進数を表す"0x"などを付けてはいけません。

 あるタイミングで、Ctrl キー、Shift キー、Alt キーなどの修飾キーの状態を取得したいというのは良くあることですが、SilverlightではKeyboard.Modifiersを使用して、上記の情報を得ることが出来ます。
 Shiftキーの状態を取得する場合は、C#だとこんな感じ

using System.Windows.Input;
...
if ((Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift)
{
  //Shiftキーが押されていた時の処理
}

 やっと本格的にSilverlight2に携わることになりましたが、Silverlight以前にC#での開発自体がほぼ初めてなので、だいぶ苦戦しています。

タグ