XAMLを使う場合の注意

注意というか当たり前なのだが、XAML上に定義したオブジェクトのコードはランタイムじゃなくても動く可能性がある、ということを何時も気にしなくてはならない。
じゃないとコンパイルエラーは一つもないはずなのにこのように原因不明のエラーに悩まされることになる。

public T GetValueOrDefault<T>(string key, T defaultValue)
{
    object value = this.appSettings.Attribute(key).Value;
    if (value != null)
    {
        return (T)value;
    }
    else
    {
        return defaultValue;
    }
}

このコードが呼ばれるのだが、this.appSettingsはデザイン時はnullなので例外が発生する。

IDEのデザイン時にコードが動くことを意識することなんてなかったもんなぁ。