誕生日から年齢を計算

必要に応じて毎回書いていたのですが、面倒なのでメモしておくことにします。
まずは、次のようなメソッドにして算出する場合です。

int GetAge(DateTime birthday, DateTime? baseday = null) {
    var b = baseday ?? DateTime.Today; // 第2引数省略時はシステム日付時点の年齢を返す
    return (getNum(b) - getNum(birthday)) / 10000;
    int getNum(DateTime d) => d.Year * 10000 + d.Month * 100 + d.Day;
}

処理内容は単純で、二つの年月日を数値化して差を求めて 10000 で割った商を年齢として返しているだけです。
なぜ 10000 で割るのかというと、たとえば「1987年1月23日」なら 19870123 という数値になっているため、10000 で割ることで「年」の部分が取り出せるからです。
なお、getNum はローカル関数で、この機能は C#7 以降のみ対応です。

たとえば、以下のように使います。

var birthday = new DateTime(1989, 12, 1); // 誕生日
var age = GetAge(birthday); // 今日時点の年齢

必要に応じて計算したい場合は、以下のようにワンライナーで書くこともできます。

var age = ((t.Year * 10000 + t.Month * 100 + t.Day) - (b.Year * 10000 + b.Month * 100 + b.Day)) / 10000;

この方が高速ですし、わかりやすいかもしれません。