2012年03月30日

FirstOrDefault使えばもっと簡潔に書けます。

   このエントリーをはてなブックマークに追加 Clip to Evernote
こちらのブログの「C#の表現力は圧倒的だ」の記事に、以下のようなコードがあります。


このコードは、以下のように書くこともできます。


この方が簡潔だし、効率も良いです。

  

Posted by gushwell at 23:57Comments(0)TrackBack(0)

2012年03月28日

Interactive Extensions(Ix) - IgnoreElementsメソッド

   このエントリーをはてなブックマークに追加 Clip to Evernote
EnumerableEx.IgnoreElements拡張メソッドは、
空のシーケンスを返すメソッドです。

以下のコードでは、何もコンソールには表示されません。


いったい何の役に立つのかわかりません。

戻り値を使わないよ、と明示するのに使うのかなと思いましたが、
LINQの場合、そういったこともほとんどないのかなと思ってしまいます。

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

2012年03月25日

Interactive Extensions(Ix) - IsEmptyメソッド

   このエントリーをはてなブックマークに追加 Clip to Evernote
EnumerableEx.IsEmpty拡張メソッドは、シーケンスが、空かどうかを返してくれます。

以下のようなコードで動きを確かめてみました。


これを実行すると、


が出力されます。
今まで以下のように書いていたわけですが、


IsEmpty使えば、より直感的に書けるってことですね。

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

2012年03月22日

Interactive Extensions(Ix) - Ifメソッド

   このエントリーをはてなブックマークに追加 Clip to Evernote
EnumerableEx.Ifメソッドは、条件が真ならば、第2引数で指定したシーケンスを、偽ならば、
第3引数で指定したシーケンスを返します。
第3引数が省略された場合は、空のシーケンスが返ります。

以下、ためしに書いてみたコードです。


ランダムにnums1, nums2のどちらかが列挙されます。

  
Posted by gushwell at 23:30Comments(0)TrackBack(0)

2012年03月20日

Interactive Extensions(Ix) - Hideメソッド

   このエントリーをはてなブックマークに追加 Clip to Evernote
今日は、EnumerableEx.Hideメソッドです。

具象型ではなく、インターフェースに対してプログラミングするのが、
オブジェクト指向プログラミングの原則なわけで、
配列や、Listではなく、IEnumerable<int> としてコードを書きたい場合が
あります。
こんな感じですね。


しかし、IEnumerable とタイプするのが面倒です。
ということで、Hideメソッドの出番になります。
Hideメソッドを使えば、以下のように、var が使えるようになります。


というのが、僕の考えた Hideメソッドの使い方なんだけど、
これで合っているのかな?

実際、Hide使う場面って全く思い浮かばない。
メソッドの引数に渡すときは、自動でUpCastされるから必要ないしなー。
LINQ to Object使うときにも、ドットでつなげればいいんだし...


追記 2013/03/21
上で書いた内容は全然的外れでした。
Hideは、具象クラスを隠し、IEnumerable<T>として提供するメソッドということです。
つまり、上記の seqは、元の型情報が隠れてしまうため、
オリジナルの int[] にダウンキャストすることを防げるということです。
教えてくださった皆さんありがとうございました。
  
Posted by gushwell at 22:00Comments(2)TrackBack(0)

2012年03月18日

Interactive Extensions(Ix) - Generateメソッド

   このエントリーをはてなブックマークに追加 Clip to Evernote
EnumerableEx.Generateメソッドは、シーケンスを生成するメソッドで、
for 文のように、初期値、継続判定、繰り返し関数 を指定し、最後の引数である値生成関数で
値を生成します。


以下は、これを実行した結果です。


なお、for 文で似たようなコードを書いてみました。


これだと、遅延実行にならず、即時実行なので、まったく同じというわけではありませんが
Generateメソッドの機能を理解する助けにはなると思います。

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

2012年03月15日

Interactive Extensions(Ix) - Finallyメソッド

   このエントリーをはてなブックマークに追加 Clip to Evernote
EnumerableEx.Finally拡張メソッドは、列挙が完了したら、指定したActionが呼び出されます。

以下が、ためしに書いたコードです。


結果は、


と表示されます。

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

2012年03月13日

Interactive Extensions(Ix) - DoWhileメソッド

   このエントリーをはてなブックマークに追加 Clip to Evernote
EnumerableEx.Dowhile拡張メソッドは、
do 〜 while 文と同様に、最低一回は列挙を行い、条件に合致している間、
列挙を繰り返します。

以下のようなコードを書いてみました。


例えば、実行されている時間が、10:24:02 だとすると、10:24:10 に達するまで、
123123123123と列挙を繰り返します。
10:24:32 だとすると、123と列挙は1回で終わります。

  
Posted by gushwell at 23:30Comments(0)TrackBack(0)