2012年02月05日

手軽に時間計測したい

   このエントリーをはてなブックマークに追加 Clip to Evernote
ちょっとした時間計測で利用できるクラスです。


以下、利用側のコード例です。usingで括ればOK。


これを実行すれば、Visual Studioでデバッグの出力ウィンドウに、開始時刻、終了時刻と
かかった時間がミリ秒単位で出力されます。

  

Posted by gushwell at 22:00Comments(0)TrackBack(0)

2010年10月04日

falseとtrueを交互に返す方法(C#)

   このエントリーをはてなブックマークに追加 Clip to Evernote
ネタ元:
a2c.get.diary ■[python] 0と1を次々返す方法
404 Blog Not Found - Algorithm - 0と1を次々と返す簡単なお仕事

すでに旬を過ぎたみたいだけど、C#で僕も書いてみました。

espresso3389の日記 で、espresso3389 さんが素晴らしいコードを紹介しているけど、もう少しオーソドックスな実装で。

true, false を交互に次々と返すようにしています。

でも、これだと、再利用性が低いので、やはりクラスにするべきかな、ということで書いたのがこれ。

dankogaiさんのコードに合わせて、いったんfunc変数に入れてから呼び出しています。
でも、Func<bool> と型を指定するのは面倒です。やはり var を使いたいです。
それと、初期値を設定できないのも、イマイチなので、

としてみました。いわゆる関数を返す関数です。
これならば、var が使えるし、初期値も与えられます。
でも、よくよく考えたら、staticフィールドは、余分ですね。
FlipFlopクラスは、
で、OKでした。
結局、espresso3389 さんのコードと、本質的には大きく変わらないものになってしまいました。
  
Posted by gushwell at 22:27Comments(4)TrackBack(1)

2010年09月29日

try-catchのスタイル

   このエントリーをはてなブックマークに追加 Clip to Evernote
やねうらおさんとこの「C#のvarとtry〜catchが糞すぎる」の記事を読んで思ったこと。

は、確かに、if 文が余分なので、初心者が書くコードなのかもしれないですが、
new をtry の外に出すこと自体は、間違っていないと考えています。

僕は、var を使う、使わないにかかわらず、

と、new を try の外側に書きます。
hoge.YYY() を catchブロックで呼び出さない場合も同様の書き方にしています。

確かに、new Hoge()での例外がキャッチできないですが、
new Hoge()での例外をキャッチしたい場合は、その上位スコープなり上位メソッドでキャッチすれば
良いと思います。

以前、Microsoft Enterprise Library のソースを覗いてみた時も、
結構、このスタイルでtry-catchが書かれていた記憶があるので、
この書き方は、僕だけが主張する特別なコードではないと思います。

もちろん、try { } の中で、new する場合もありますが、その時には、そもそも catchで、
hogeにアクセスするコードは書きませんし、
そうなったら、自分のコードが何かおかしなことになっているぞ、と考えてしまいます。

C#の try ブロックのスコープがもうすこし広くても良いのでは、と思うこともありますが、
そういった仕様なので、その仕様のなかで、どう書くかを考えたときに、
上記のスタイルが自然なのかなと...

try-finally の時も new は、try の外側に出します。
まあ、大抵は、using使うので、書くことは少ないですが...
http://msdn.microsoft.com/ja-jp/library/yh598w02(v=VS.100).aspx読んでもらえれば、new を try-finallyの外に出す理由は分かってもらえると思います。

まあ、いろんな意見の人がいると思うので、あくまでも僕個人の意見ということで...   
Posted by gushwell at 23:34Comments(3)TrackBack(1)

2010年09月09日

enumってnewできるんだ!

   このエントリーをはてなブックマークに追加 Clip to Evernote

という列挙型に対して、


て書けちゃうんだ。

つい最近知りました。
なんで禁止されてないんだろう。


と同じといわれれば、そうなんだけど...

でも、


だとすると、


の x には、不正な値が入っちいますね。 まあ、new することなんてないから、いいけどね。   
Posted by gushwell at 23:03Comments(6)TrackBack(0)

2010年07月27日

Microsoft.Web.Administration API

   このエントリーをはてなブックマークに追加 Clip to Evernote

C:\Windows\System32\inetsrv\Microsoft.Web.Administration.dll

をプロジェクトの参照設定に加えると、

Microsoft.Web.Administration API

が利用可能になります

例えば、以下のようなコードを書くと、


IIS の "Default Web Site" に、アプリケーションを追加できます。
  
Posted by gushwell at 22:28Comments(0)TrackBack(1)

2009年09月23日

メソッドのオーバーロードの解決

   このエントリーをはてなブックマークに追加 Clip to Evernote
このようなクラスがあったとします。


このとき、以下のような呼び出しを行うと、どのメソッドが呼ばれるのかを調べてみました。


実行した結果は、


となりました。
このことから、暗黙の型変換よりも、ジェネリックメソッドの パラメータ型のほうが優先順位が高いということが推察できます。
ただ、1番目の呼び出しのように引数の型が異なる場合は、コンパイラは、型変換を行い、どれかのメソッドと一致させようとするので、ジェネリックメソッドではない通常のメソッドが選択されることになるようです。
どのメソッドが呼ばれるのかは、なんとなく感覚的には分かるのですが、これを言葉であらわそうとすると、うまく表現できません。  
Posted by gushwell at 22:32Comments(2)TrackBack(0)

2009年06月17日

C#で高階関数

   このエントリーをはてなブックマークに追加 Clip to Evernote
Gushwell's F# Programming Diary で、高階関数のことについて書きましたが、 C#でも、と思って、はてなキーワード 高階関数 のページにあるコードを C#で書いてみました。


となる関数 f を定義するというものです。


とこんな感じでしょうか?

これを使った例を以下に示します。


  
Posted by gushwell at 21:56Comments(0)TrackBack(0)

2009年05月21日

implicitによる暗黙の型変換

   このエントリーをはてなブックマークに追加 Clip to Evernote
いきなりですが、何らかの都合で独自の日付クラスが必要になったとします。

とはいっても、.NET 標準のDateTime構造体を使わないで済ませることもできません。
当然ながら、この2つの型の相互変換が必要になってきます。
どうやるのがよいのか。

のように、MyDateクラスに、ToDateTimeメソッドと FromDateTime staticメソッド を追加するのがひとつの方法です。
以下のようなメソッドを書けばいいわけですね。

これはこれで良いと思うのですが、いちいちメソッド呼び出しを書くのが面倒です。
int -> double へ自動的に型変換が行えるように、MyDateとDateTimeが相互に代入できればもっと、コードが簡潔になります。
そんなときに使えるのが、implicitキーワードです。


こんな風に、operatorキーワードとあわせて使うと、
なんと、こんな記述が可能になります。

ここでは、MyDateは、classとして定義しましたが、structであっても同じことです。
  
Posted by gushwell at 23:22Comments(0)TrackBack(0)