2010年03月07日

C#4.0 : dynamicを使いジェネリックスで加算減算をする

   このエントリーをはてなブックマークに追加 Clip to Evernote
メールマガジン「C#プログラミングレッスン」No243では、 どう書くorgで出されているお題「隣り合う二項の差」のコードを示しました。
その以下に示します。


このメソッドは引数に、 int[], List<int>などは受け取れますが、double[], List<long>などは 受け取れません。


というジェネリックメソッドにしたとしても、


で、減算ができないため、コンパイルエラーになってしまいます。 このエラーを取るには、C#3.0では、力づくで場合分けするなどする必要があります。
参考URL:http://gushwell.ldblog.jp/archives/51533037.html

しかし、C#4.0ななると、dynamic型が導入されるので、 以下のように、書くことができます。


この機能があることで、ジェネリックの応用範囲がさらに広げられそうです。


この記事へのコメント
C#3.0で、
using Microsoft.VisualBasic.CompilerServices;

static IEnumerable<T> Diff<T>(IEnumerable<T> xs) {
var ite = xs.GetEnumerator();
if (ite.MoveNext()){
for (T prev = ite.Current; ite.MoveNext(); prev = ite.Current) {
yield return (T)Operators.SubtractObject(ite.Current, prev);
}
}
}
とはできるようです。
Posted by BLUEPIXY at 2010年03月08日 21:15
へー、Microsoft.VisualBasic.CompilerServices に、こんな機能があったんですね。
勉強になりました。
Posted by Gushwell at 2010年03月08日 22:32
 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/51983878