R.Tanaka.Ichiro's Blog

主にC# な話題です

目次

Blog 利用状況

ニュース

ジェネリクの型推論

ジェネリックの型推論は、かなり賢い処理をしているように思います。
次のコードは、2 値の値から、小さい値を返す処理をするジェネリックメソッドです。


public static T Min<T>(T value1, T value2) where T: IComparable<T> {
  return value1.CompareTo(value2) < 0 ? value1 : value2;
}


2 つの引数の型と、戻り値の型は全て T という抽象的なデータ型になっています。
なお、T は、IComparable<T> を実装している必要があります。

上記のメソッドを使用して、

あえて異なる型の値

を引数として与えてみます。

更に、どのように型を推論したのかを、戻り値の型名を表示することで確認してみました。


 var a = Min(1, 3L);
 Console.WriteLine(a); // 1
 Console.WriteLine(a.GetType().Name); // Int64


引数では、int 型の 1 と、long 型の 3 を渡した例です。
結果として、long 型(Int64) の 1 という値が返ってきました。


 var b = Min(2L, 3m);
 Console.WriteLine(b); // 2
 Console.WriteLine(b.GetType().Name); // Decimal


引数では、long型の 2 と、decimal 型の 3 を渡した例です。
結果として、decimal 型(Decimal) の 2 という値が返ってきました。


 var c = Min(1.2F, 3L);
 Console.WriteLine(c); // 1.2
 Console.WriteLine(c.GetType().Name); // Single


引数では、float 型の 1.2 と、long 型の 3 を渡した例です。
結果として、float 型(Single) の 1.2 という値が返ってきました。


なんとなく

http://blogs.wankuma.com/rti/archive/2009/08/17/180218.aspx
null 許容型の不思議

に近いネタになってしまった・・・

でも、やっぱりコンパイルエラーにして欲しい気もしますけれども。

投稿日時 : 2009年8月20日 15:39

Feedback

# Heck yeah this is exactly what I neeedd. 2011/09/10 15:31 Medford

Heck yeah this is exactly what I neeedd.

タイトル
名前
Url
コメント