ジェネリクス

ジェネリクスについて。
C++でminを書く場合、自由度は少ない。C#だといろんな書き方がある。

static int Min1(int i, int j)
{
	return i.CompareTo(j) < 0 ? i : j;
}
static T Min2<T>(T i, T j) where T : IComparable<T>
{
	return i.CompareTo(j) < 0 ? i : j;
}
static T Min3<T>(T i, T j) where T : IComparable
{
	return i.CompareTo(j) < 0 ? i : j;
}
static IComparable<T> Min4<T>(IComparable<T> i, T j) where T : IComparable<T>
{
	return i.CompareTo(j) < 0 ? i : j;
}
static IComparable Min5(IComparable i, IComparable j)
{
	return i.CompareTo(j) < 0 ? i : j;
}

速度は、Min1 = Min2 < Min3 < Min4 < Min5 となる。結論として、Min2で作成し、よく使うものは Min1 でオーバロードすればよい。


勉強会で、PostSharp、VSTO 、Wintellect Power Collection 、デバッガビジュアライザの発表をする予定。


新しい try構文を考えた。

try
{
  ...
catch (XxxException e1):
catch (YyyException e2):
catch:
  ...
finally:
  ...
}

ブロックは1つになり、catchと finallyはラベルとなる。こうすると、try ブロックの変数をcatch ブロックで使える。また、XxxExceptionの処理とYyyExceptionの処理が同じなら、switchと同じく1つ書くだけでよい。